标签:创建线程 先进先出 white nts 消息队列 protected 创建 save ati
指定callback參数,则由callback处理消息。
public void doSendMessage(View view){ Message msg; Runnable callback = new Runnable(){ @Override public void run() { System.out.println("高优先级"); } }; msg = Message.obtain(new Handler(),callback); msg.sendToTarget(); }
private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); handler = new Handler(new InnerHandlerCallback()); } private class InnerHandlerCallback implements Handler.Callback{ @Override public boolean handleMessage(Message msg) { System.out.println("中优先级"); return false; } } public void doSendMessage(View view){ Message msg; Runnable callback = new Runnable(){ @Override public void run() { System.out.println("高优先级"); } }; msg = Message.obtain(handler); msg.sendToTarget(); }
线程通信模型
因为向目标线程发送消息的线程可能比較多,为了确保目标线程
能收到这些消息。并逐一处理。在消息机制中,存在4种角色:
Message:消息的载体
Handler:发送消息、处理消息
MessageQueue:消息队列
Looper:消息队列的管理者
Handler用于运行消息的发出和处理
Handler关联一个独立的线程及消息队列。即Handler在哪个线程创建。则绑定到哪个
线程的消息队列。
MessageQueue是Message的容器,它是一个先进先出、后进后出的队列;
不论什么Message在被发出后,都会被先放到MessageQueue中。然后逐一的发送给目标。
Looper是MessageQueue的管理者
当Message被发出后。由Looper关联的MessageQueue.IdleHandler将其加入到MessageQueue中
Looper在工作时,会循环读取MessageQueue,然后实现消息的发送
MessageQueue是由Looper实现管理,英雌,开发者无需对它进行处理
Handler的创建线程决定了他所在的线程。则处理相应线程中收到的消息
每一个线程都能够有独立的Looper。由各个Looper管理各个线程的消息队列
Looper必须调用prepare()系列方法进行初始化,然后在调用loop()方法才会開始工作
每一个Handler在初始化之前。相应的线程中必须有匹配的Looepr,而主线程默认即存在已经启动的Looper
标签:创建线程 先进先出 white nts 消息队列 protected 创建 save ati
原文地址:http://www.cnblogs.com/cxchanpin/p/7189987.html