Looper是整个跨线程通信的管理者

    // 内部持有的变量如下:ThreadLocal<Looper>MainLooperObserverMessageQueueThread

1.首先先回忆一下Handler怎么用

Android线程通信分为以下两种情况
1.子线程发消息给UI线程
2.UI线程发消息给子线程
3.子线程发消息给另个子线程

1.子线程发消息给UI线程

class FragmentContentActivity : AppCompatActivity() {val FLAG = 1lateinit var handler: Handleroverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)handler = object : Handler(Looper.getMainLooper()) {override fun handleMessage(msg: Message) {when (msg.what) {FLAG -> {findViewById<TextView>(R.id.text).text = msg.data["Text"].toString()}}}}thread {Thread.sleep(2000L)handler.sendMessage(Message.obtain().apply {what = FLAGdata = Bundle().apply {this.putString("Text", "ThreadMessage")}})}}
}

2.UI线程/子线程发消息给子线程

class FragmentContentActivity : AppCompatActivity() {val THREAD_FLAG =2lateinit var threadHandler: Handleroverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)thread {Looper.prepare()threadHandler = object :Handler(Looper.myLooper()!!){override fun handleMessage(msg: Message) {when(msg.what){THREAD_FLAG -> {Toast.makeText(this@FragmentContentActivity,"${msg.data["Text"]}",Toast.LENGTH_SHORT).show()}}}}Looper.loop()}}override fun onResume() {super.onResume()findViewById<TextView>(R.id.text).postDelayed({threadHandler.sendMessage(Message.obtain().apply {what = THREAD_FLAGdata = Bundle().apply {putString("Text","UI Message")}})},2000L)}
}

**在子线程的使用中,我们发现必须要进行Looper.prepare()和Looper.loop()前后这两个操作,因此,带着这个疑问来看一下Looper的逻辑
**

// 在调用prepare()之后一定要调用loop(),最后结束消息循环的时候调用quit()
private static void prepare(boolean quitAllowed) {if (sThreadLocal.get() != null) {throw new RuntimeException("Only one Looper may be created per thread");}sThreadLocal.set(new Looper(quitAllowed));
}
private Looper(boolean quitAllowed) {mQueue = new MessageQueue(quitAllowed);mThread = Thread.currentThread();
}

prepare()就是将初始化一个Looper对象放入到ThreadLocal中,初始化Looper,同时mQueue

    public static void loop(){Binder.clearCallingIdentity()
for (;;) {Message msg = queue.next(); // might blocklong origWorkSource = ThreadLocalWorkSource.setUid(msg.workSourceUid);try {// 其实 loop()只做了这一个调用,其他的都是监控当前消息循环时间是否超时,应该和ANR有关msg.target.dispatchMessage(msg);if (observer != null) {observer.messageDispatched(token, msg);}dispatchEnd = needEndTime ? SystemClock.uptimeMillis() : 0;} catch (Exception exception) {if (observer != null) {observer.dispatchingThrewException(token, msg, exception);}throw exception;} finally {ThreadLocalWorkSource.restore(origWorkSource);if (traceTag != 0) {Trace.traceEnd(traceTag);}}if (logSlowDelivery) {if (slowDeliveryDetected) {if ((dispatchStart - msg.when) <= 10) {Slog.w(TAG, "Drained");slowDeliveryDetected = false;}} else {if (showSlowLog(slowDeliveryThresholdMs, msg.when, dispatchStart, "delivery",msg)) {// Once we write a slow delivery log, suppress until the queue drains.slowDeliveryDetected = true;}}}if (logSlowDispatch) {showSlowLog(slowDispatchThresholdMs, dispatchStart, dispatchEnd, "dispatch", msg);}//消息实体回收msg.recycleUnchecked();

可以看到Looper.loop其实只是在for循环中,获取mQueue的下一个msg节点,然后调用msg.target.dispatchMessage(msg)。乍看只是msg对象内部的操作。

因为loop()其实逻辑上算死循环,这意味着,当前线程的自发的顺序执行命令到此结束了,只能通过其他线程触发handler机制,来被动的在当前线程执行命令,当前线程完全变成了一个响应线程

Looper类只是初始化并开启线程死循环的一个开关,具体工作在MessageQueue中进行

MessageQueue 消息队列

队列内消息的添加不是直接调用MessageQueue,而是由与Looper相关联的Handler调用

MessageQueue的内部持有的变量如下: ArrayList mMessages SparseArray IdleHandler[] mBlocked

MessageQueue类的功能主要有:元素插入队列,获取队列的头部元素,查找队列中元素,综述就是对队列的增删改查,其中 mMessage就是这个队列的入口也是这个队列的头结点

  boolean enqueueMessage(Message msg,long when) //msg 元素插入队列boolean hasMessages(Handler h,int what,Object object) //查找handler下的msg.what/object相同的Msgboolean hasEqualMessages(Handler h,int what,Object obj)//查找 msg.object.equal(obj)的msgremoveMessages(Handler h,int what,Object obj)/(Handler h,Runnable r,Object obj)removeEqualMessages(...) //删除与参数msg.object相同或equal的msgMessage next() //获取队列中的头部元素

可以看出,这些方法内部都调用了 synchronized(this),队列的操作都是线程同步的

Message next() ->
...// linux机制下的总线进入轮询,线程相当于挂起状态,nextPollTimeOut是挂起多长时间
nativePollOnce(ptr, nextPollTimeoutMillis);synchronized (this) {final long now = SystemClock.uptimeMillis();Message prevMsg = null;Message msg = mMessages;//先判断msg.target是否为null,表示当前消息是不是异步消息if (msg != null && msg.target == null) {// Stalled by a barrier.  Find the next asynchronous message in the queue.//同步屏障:取出当前队列中的异步消息do {prevMsg = msg;msg = msg.next;} while (msg != null && !msg.isAsynchronous());}if (msg != null) {if (now < msg.when) {// Next message is not ready.  Set a timeout to wake up when it is ready.//重新计算线程进入挂起状态的时间nextPollTimeoutMillis = (int) Math.min(msg.when - now, Integer.MAX_VALUE);} else {// Got a message.mBlocked = false;if (prevMsg != null) {prevMsg.next = msg.next;} else {mMessages = msg.next;}msg.next = null;if (DEBUG) Log.v(TAG, "Returning message: " + msg);msg.markInUse();return msg;}} else {// No more messages.nextPollTimeoutMillis = -1;
}
...

可以看出next()内部主要有两种获取msg的逻辑

1.当前消息都是普通消息,按照msg.when的大小排序,每一次循环执行,通过检测when是否大于now来决定是否获取msg,或是挂起当前线程。
2.当前消息中有异步消息,优先获取msg.isAsynchronous()==true的,或者按照此异步消息的等待时间,来重新设置挂起线程的时间,从而达到精准的获取异步消息。

通俗的来讲就是说,当前所有普通消息按照预约的执行时间的先后来排队,这样可基本上既可以达到按照预约时间执行消息,也可以最大效率的在一定时间段内执行最多的消息,但是这忽略了每个消息的执行消耗的时间,比如A消息是队列内的No.1,A消息预约执行时间是1s之后,整个队列是等待状态的,这个时候来了B消息,B消息预约的时间是0.999s之后,按照预约时间的排队机制,B消息要插队到A消息之前,B成了这个队列的No.1,A成了No.2,整个队列的等待时间还是1s(因为之前设置了等待时间,所以不用唤醒),但是B消息的执行过程长达0.5s,已经超过了之后的很多消息的预约执行时间点了,这样就不能保证某些重要的消息按时执行。

于是就有了异步消息同步屏障的机制,这相当于普通消息排队时来了一个VIP消息,先按照预约时间找到自己的位置,然后大喝一声:“都把脚给我挪开,我的前面不允许有人”,这个时候排在他之前的普通消息就只能全部挪到队列的一边,然后队列重新按照这位VIP消息,设置等待时间,期间新来的普通消息也插到队边等待,保证精准按时执行VIP消息。等VIP消息执行完,之后再把之前等待普通消息的队列合并执行。当然之前等待的消息全耽误了,但毕竟是普通消息不重要。

 // 同步屏障的方法,此方法只在 ViewRootImpl类中调用
private int postSyncBarrier(long when) {// Enqueue a new sync barrier token.// We don't need to wake the queue because the purpose of a barrier is to stall it.synchronized (this) {final int token = mNextBarrierToken++;final Message msg = Message.obtain();msg.markInUse();msg.when = when;msg.arg1 = token;//没有设置targetMessage prev = null;Message p = mMessages;if (when != 0) {while (p != null && p.when <= when) {prev = p;p = p.next;}}if (prev != null) { // invariant: p == prev.nextmsg.next = p;prev.next = msg;} else {msg.next = p;//mMessages变为同步屏障消息,next()下一次循环,首先获取到的是同步屏障mMessages = msg;}return token;}// ViewRootImplvoid scheduleTraversals() {if (!mTraversalScheduled) {mTraversalScheduled = true;mTraversalBarrier = mHandler.getLooper().getQueue().postSyncBarrier();mChoreographer.postCallback(Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null);if (!mUnbufferedInputDispatch) {scheduleConsumeBatchedInput();}notifyRendererOfFramePending();pokeDrawLockIfNeeded();}//设置同步屏障之后,通过设置了Aysnc标记位的Handler发送的Msg都是异步消息,
//MessageQueue也优先处理此类异步消息,直到移除同步屏障标记位,再恢复到普通消息队列。

由此可见,同步屏障的设置和View刷新机制有关,因为要保证Vsync信号按时完成刷新操作,具体分析待续…
综述,异步消息可以保证精准的执行,但也因此消息事件的先后顺序被打乱,有可能在代码执行中执行了Handler.sendMsg(1,time0.2)->AsyncHandler.sendMsg(2,time0.5),但是实际执行的是 2->1。

再看Handler
Handler的成员变量如下

mLooper :初始化时获取当前线程的Looper对象引用 mQueue :通过Looper.mQueue 获取到的MessageQueue队列引用mAsynchronous :标记当前Handler是否发送异步消息 mCallback : Handler自身的callback接口,此callback调用在Message.callback之前mMessenger :IMessager 和进程通信相关

以上成员变量大都是final类型,表示Handler也是在其使用上也是final类型,也就是说,没有办法通过将Handler与context的生命周期相剥离来避免内存泄漏

Handler的方法如下

    //Handler 发送Message第一种方法,设置Message的what,data//不设置 runnable:Callback boolean sendMessage(Message msg) -> boolean sendMessageDelayed(Message msg,long delayTime)-> boolean sendMessageAtTime(Message msg,SystemClock.uptimeMillis()+delayTime)-> mQueue.enqueueMessage(msg,uptime)//第二种方法,Message只设置runnable:Callbackboolean postAtTime(Runnable r,Object token,long uptime)-> sendMessageAtTime(getPostMessage(r,token),uptime)--> Message getPostMessage(Runnable r,Object token){Message.obtain().callback=r...}//移除Message和检验MessageremoveMessages() hasMessages()...//Message 回调执行void dispatchMessage(Message msg){if(msg.callback!=null){handleCallback(msg) ->}else{if(mCallback!=null){mCallback.handleMessage(msg)}handleMessage(msg)}//可以看到 Message的回调分为三个等级//No.1 msg自身的callback//No.2 Handler自身的mCallback成员变量,mCallback是final类型//No.3 Handler的子类重载的handleMessage方法

Message

Message 实现了Parcelable接口,也就是说可以作为进程间通信的载体

Message成员变量如下

    int what //Handler发送主体下的Message的消息码int arg1 //低成本的参数传递int arg2 Object obj //可以为空的token对象,一般在进程通信中用到Bundle data //线程通信中常用的参数容器Handler target //发送主体Runnable callback //Message自身回调Messenger replyTo   //进程通信,一般在AMS中用到------// Message缓存池相关Object sPoolSync = new Object() // 同步标记Messsage next static Message sPoolstatic int sPoolSize

Message方法如下

    //可以看出这是一个非常巧妙的方法static Message obtain(){synchronized(sPoolsSync){if(sPools!=null){Message m= sPool;sPool = m.next;m.next = null;sPoolSize--;return m;}}return new Message();}//主体上是一个带缓存池链表的同步工厂模式,同时也考虑到较多线程阻塞时//可以直接声明初始化对象//回收Message对象到缓存池链表void recycleUnchecked(){...参数=nullsynchronized(sPoolSync){if(sPoolSize < MAX_SIZE){next = sPool;sPools = this;sPoolSize++;}}}   
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 矢量绘图设计工具:Sketch 79 for mac

    SketchMac是一款为设计师量身定做的优美界面和强大工具兼有的专业绘图工具。能够满足网页、用户界面、图标等的设计需求。 Sketch是一款为设计师量身定做的优美界面和强大工具兼有的专业绘图工具。制作出漂亮的图形是一件很有挑战性的事情&#xff0c;你所需要的是一款精心设计…...

    2024/5/1 14:54:31
  2. PostgreSQL数据库查询表的大小

    PostgreSQL数据库查询数据库中每张表的大小 SELECT table_schema || . || table_name AS table_full_name, pg_size_pretty(pg_total_relation_size(" || table_schema || "." || table_name || ")) AS size FROM information_schema.tables ORDER BY pg_…...

    2024/4/19 10:03:59
  3. Could not install from “Files\nodejs\node_modules\npm\node_cache\_npx\14564“ as it does not contain

    npm 下载安装某些模块时报错 具体报错&#xff1a; npm ERR! code ENOLOCAL npm ERR! Could not install from "Files\nodejs\node_modules\npm\node_cache\_npx\14564" as it does not contain a package.json file. npm ERR! …...

    2024/5/1 7:50:31
  4. SpringMVC的拦截器

    1 SpringMVC中拦截器 1.1 作用 作用:类似于javaweb中的Filter,用来对请求进行拦截,可以将多个Controller中执行的共同代码放入拦截器中执行,减少Controller类中代码的冗余. 1.2 特点 拦截器器只能拦截Controller的请求,不能拦截jsp。 拦截器可中断用户的请求轨迹。 请求先经…...

    2024/5/1 15:04:41
  5. junit5 入门系列教程-05-junit5 断言(assert)

    目录目录 Assert 实例 三方 jar系列导航AssertJUnit Jupiter附带了许多JUnit 4拥有的断言方法,并添加了一些可以很好地用于Java 8 lambdas的断言方法。 所有JUnit木星断言都是 org.junit.jupiter.api.Assertions 中的静态方法断言类。实例AssertTest.javaimport org.junit.ju…...

    2024/5/1 11:31:49
  6. PlatFormIO 配置项修改,解决烧录速度慢问题

    记录了一些常用配置参数&#xff0c;工程中编辑PlatFormIO.ini 修改即可&#xff0c;可以解决默认串口烧录不成功、烧录速度慢等问题。 ESP8266常见烧录速度&#xff1a;115200 256000 921600 3000000 &#xff0c;设置其他速度可能导致匹配波特率不成功烧录失败。 [env:esp1…...

    2024/5/1 8:58:28
  7. 2021-11-03 每日记shell命令之根据关键字查找归属文件

    根据关键字&#xff0c;查找归属文件 yfyf:~/kafka_2.12-3.0.0/config$ ls connect-console-sink.properties connect-file-source.properties consumer.properties server.properties connect-console-source.properties connect-log4j.properties kraft …...

    2024/4/25 18:33:28
  8. C深刨,内存管理

    文章目录什么是内存管理&#xff1f;为什么要内存管理&#xff1f;常见的错误&#xff01;&#xff01;&#xff01;申请空间的细节&#xff01;&#xff01;&#xff01;什么是内存管理&#xff1f; int main(){int *p malloc(sizeof(int)* 10);if (NULL p){perror("m…...

    2024/5/1 14:48:37
  9. 项目练习(一)

    项目名称: 学生管理系统实现思路 项目思路: 1.定义学生类 2.主界面的代码编写 3.添加学生的代码编写 4.查看学生的代码编写 5.删除学生的代码编写 6.修改学生的代码编写 7.解决删除/修改学生学号不存在问题 8.解决添加学生学号重复问题 1.定义学生类 思路: 学生类: Student …...

    2024/4/24 9:23:10
  10. 广东最新建筑施工八大员之安全员机考真题及答案解析

    百分百题库提供建筑施工八大员之安全员考试试题、建筑施工八大员考试预测题、八大员考试真题、安全员证考试题库等,提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 50、《建筑法》规定、施工总承包的、建筑工程()的施工必须由总承包单位自行完成。 …...

    2024/5/1 8:07:35
  11. SpringBoot之Dockerfile

    目录结构 准备工作 假设这里的SpringBoot项目通过maven构建好了Fat Jar包。 Dockerfile FROM openjdk:8-jdk-alpine VOLUME /tmp RUN addgroup -S spring && adduser -S spring -G spring USER spring:spring ARG JAR_FILEtarget/*.jar COPY ${JAR_FILE} app.jar EN…...

    2024/4/19 10:31:59
  12. 深入理解JVM5:GC篇(CMS、G1回收器)

    此篇博客主要以笔记的形式&#xff0c;记录笔者在B站《深入理解JVM》课程中学到的知识点。课程地址&#xff1a;《黑马程序员JVM完整教程&#xff0c;全网超高评价&#xff0c;全程干货不拖沓》 1.串行回收器(Serial、SerialOld) SerialOld 工作在老年代&#xff0c;使用的是标…...

    2024/5/1 13:10:28
  13. 盲盒开发流程详解源码搭建一番赏芒趣

    盲盒软件源码开发&#xff0c;盲盒软件源码开发&#xff0c;盲盒app原生开发&#xff0c;盲盒系统开发&#xff0c;盲盒小程序开发&#xff0c;盲盒模式开发&#xff0c;盲盒平台搭建&#xff0c;盲盒功能详解&#xff0c;盲盒源码搭建&#xff0c;一番赏小程序&#xff0c;芒趣…...

    2024/5/1 5:59:12
  14. java 实现图片加文字水印

    工具类WaterMarkUtils 字体 大小可改。 import lombok.extern.slf4j.Slf4j; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream;/*** <p>给图片添加文字水印</p>** …...

    2024/5/1 13:47:00
  15. 计算机技术与软件专业技术资格考试(初级程序员)(一)

    没错又是一个美好的周三&#xff0c;竹子再一次逃课来学习了&#xff0c;别问我为什么今天发的这么早&#xff08;因为我多逃了一堂历史课&#xff09;咱就是说&#xff0c;纯粹的不想历史考试 废话完了&#xff0c;进入正题 竹子以0.5分之差与今年CSP无缘之后&#xff0c;受…...

    2024/5/1 5:36:55
  16. 2021.11.03 - SX05-03.替换空格

    文章目录1. 题目2. 思路(1) 双指针法3. 代码1. 题目 2. 思路 (1) 双指针法 利用一个指针遍历字符串s&#xff0c;另一个指针遍历字符数组res&#xff0c;填入字符串s的字符并替换空格即可。 3. 代码 public class Test {public static void main(String[] args) {} }class …...

    2024/5/1 15:13:45
  17. 【Python】使用itertools.groupby()进行列表的归类和个数统计

    本文概览一、问题来源二、groupby概述0、文档介绍1、列表的使用2、列表套字典的使用3、参数选用函数返回的方式使用三、注意事项一、问题来源 刷题的时候想要快速统计一个列表当中连续出现的元素的个数&#xff0c;除了自己实现之外&#xff0c;想要更快速的方式就百度了一下&…...

    2024/4/26 15:46:47
  18. SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了

    在我们平时工作中经常会遇到要操作Excel的功能&#xff0c;比如导出个用户信息或者订单信息的Excel报表。你肯定听说过POI这个东西&#xff0c;可以实现。但是POI实现的API确实很麻烦&#xff0c;它需要写那种逐行解析的代码&#xff08;类似Xml解析&#xff09;。今天给大家推…...

    2024/5/1 7:49:48
  19. 防水蓝牙耳机什么牌子好?好用的防水耳机推荐

    耳机都选择什么样的&#xff0c;大多数人都在使用真无线耳机了&#xff0c;有线耳机使用的数量下降了许多&#xff0c;真无线耳机的出现是科技进步的又一大体现&#xff0c;它便携方便&#xff0c;受到欢迎&#xff0c;双十一即将到来&#xff0c;为大家推荐如下几款&#xff0…...

    2024/4/20 16:05:11
  20. 浏览器输入一段url经历过程

    1、首先&#xff0c;在浏览器地址栏中输入url地址 2、浏览器先查看浏览器缓存-系统缓存-路由器缓存&#xff0c;如果缓存中有&#xff0c;会直接在屏幕中显示页面内容&#xff0c;没有&#xff0c;则下一步。 3、在发送HTTP请求前&#xff0c;需要域名解析&#xff08;DNS解析…...

    2024/4/19 23:10:57

最新文章

  1. 【C++】:日期类的实现 -- 日期计算器

    前言 1.日期类是一种十分经典的类型。对于C的初学者&#xff0c;它能够帮助我们融会贯通许多C的基础知识&#xff0c;它涉及许多的基础语法&#xff0c;比如引用&#xff0c;函数重载&#xff0c;传值/传参返回&#xff0c;构造函数&#xff0c;运算符重载&#xff0c;const成…...

    2024/5/1 15:32:41
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 6.9物联网RK3399项目开发实录-驱动开发之PWM的使用(wulianjishu666)

    嵌入式实战开发例程&#xff0c;珍贵资料&#xff0c;开发必备&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1149x7q_Yg6Zb3HN6gBBAVA?pwdhs8b PWM 使用 前言 AIO-3399J 开发板上有 4 路 PWM 输出&#xff0c;分别为 PWM0 ~ PWM3&#xff0c;4 路 PWM 分别使用在…...

    2024/4/30 3:30:01
  4. 第十一届蓝桥杯物联网试题(省赛)

    对于通信方面&#xff0c;还是终端A、B都保持接收状态&#xff0c;当要发送的数组不为空再发送数据&#xff0c;发送完后立即清除&#xff0c;接收数据的数组不为空则处理&#xff0c;处理完后立即清除&#xff0c;分工明确 继电器不亮一般可能是电压不够 将数据加空格再加\r…...

    2024/5/1 13:34:09
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/29 23:16:47
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/30 18:21:48
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57