Activity中多个Handler中Message传递

Handler使用首先需要明白Handler是在主线程中运行的,但是什么是主线程呢?

通常我们所说的主线程其实就是ActivityThread,它管理一个应用程序内的各个组件(Activity、broadcastReceiver、service)等,这些组件都是在同一个进程中,同一个主线程中,ActivityThread类就是代表Application主线程。

接下来我们讨论Handler处理过程:Handler运行在创建Handler的线程中,一个Looper对应一个MessageQueue,一个线程对应一个Looper,一个Looper可以对应多个Handler,在不确定当前线程时,更新UI尽量采用Post  runnable方式来运行。

下面我们讨论一个Activity对应多个Handler的情况:

1、Handler发送消息:

public boolean sendMessageAtTime(Message msg,long uptimeMills){

...

if(queue!=null){

msg.target = this;//这个地方说明我们发送的消息处理到这个函数的时候会给msg打个标签,并且把发送消息的handler传过来

sent = queue.enqueueMessage(msg,uptimeMills);

}

...

}

2、Looper中的循环

public static final void loop(){

Looper me = myLooper();

MessageQueue queue = me.mQueue;

while(true){

...

Message msg = queue.next();

...

//这个地方说明消息处理的时候是通过msg的标签处理的,这个就我们发送消息的handler,原来如此这样就把msg和handler联系到了一起

msg.target.dispatchMessage(msg);

msg.recycle();

}



}



这样多个handler实际上都是通过一个Looper和一个MessageQueue来处理消息的   ,但是消息处理过程又依赖发送消息的handler,所以一个activity中多个handler是依存的,并且service  activity  broadcast 都是在使用同一个Looper

你可能感兴趣的:(Activity中多个Handler中Message传递)