1.Handler的工作流程( 五 )


与后续修改系统时间无关 。
2.线程与与
一般会问一个线程中允许创建多个嘛?允许创建多个嘛?
在一个线程中 , 你可以创建多个对象 , 并且每个对象都需要关联一个对象 。所以说 , 一个线程可以创建多个  , 但每个都需要有一个关联的。
3.一个线程中多个怎么判断用哪一个进行接收
我们继续搬上之前那段经典代码
Messagemessage = new Message();message.what = 1;message.obj = "2";mHandler.sendMessage(message);
Handler mHandler = new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(@NonNull Message msg) {switch (msg.what){case 1:mTextView.setText(""+message.obj);}return true;}});
答案很明显了吧,我们就是通过的what属性来确定后面再里面怎么进行处理
4.如何消耗数据?时间怎么判断? 1.如何消耗数据
我们重新回顾一下的流程
通过/post/这几种方法将/对象传到()然后会调用()将对象加入里面,然后进行初始化方法会调用的set方法然后调用loop进行查找,查找到后调用.进行消息的处理
其中**.()**的这个流程的操作就是如何消耗数据
先判断.为不为null , 如果不为null的话,直接()
如果为null的话判断为不为null , 这个为一个全局变量,如果它不为null的话则再判断它的.为不为true , 如果为true的话就结束
如果为null或者.不为true的话则调用**()**方法
这就是的处理
你有没有发现那个()特别眼熟
Handler mHandler = new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(@NonNull Message msg) {switch (msg.what){case 1:mTextView.setText(""+message.obj);}return true;}});
在.()中重写的就是()
所以我们遇到的大部分情况就是.==null或者.!=true
所以我们需要重写
方法
我们来看看.,,.分别表示什么
1..
.是类中的一个字段 , 它允许你在发送消息时指定一个对象作为回调函数 。当消息被处理时 , 如果.不为null , 将直接执行该回调函数 , 而不会经过的处理逻辑 。
1.
我们可以点击的源码发现它指向
final Callback mCallback;
1..
我们点击()的源码
public interface Callback {/*** @param msg A {@link android.os.Message Message} object* @return True if no further handling is desired*/boolean handleMessage(@NonNull Message msg);}
时间怎么判断
handler.sendMessageDelayed(message,2000);
表示将在系统启动后约2ms之后进行该操作
2.消息机制与时间排序
给出的解释是:
的消息机制和时间排序基于消息队列()和消息循环() 。
消息队列是用来存储和管理待处理的消息的数据结构 , 它按照消息的触发时间进行排序 。当使用发送消息时 , 消息会被添加到消息队列中 , 并按照触发时间的顺序插入到合适的位置 。
消息循环是一个无限循环 , 它从消息队列中取出消息并将其交给对应的进行处理 。在每次循环迭代中 , 消息循环会检查消息队列中是否有消息待处理 。如果有消息 , 则根据消息的触发时间和优先级依次处理消息 , 直到消息队列为空 。
通过消息队列和消息循环的配合 , 能够按照正确的顺序处理消息 。消息的触发时间决定了消息在队列中的位置 , 而消息循环负责按照队列顺序逐个取出消息进行处理 。