handler是如何切换线程的

handler是消息处理者,把消息放到messagequeue,并对消息进行处理。

首现 在一个线程中, new Handler() 必须先执行,Looper.prepare() 创先looper,

主线程没有手动调用Looper.prepare(),是因为 app启动时,在ActivityThread main主入口,执行了 Looper.prepareMainThread.   

public static void prepareMainLooper() {  ...  }

实际线程间切换,就是通过线程间共享变量实现的。


示例,两个线程 A线程   B线程

在A线程new handler(),在b线程调用这个handler发送消息,这个message发送到了,A线程中的 messageQueue里面,又回到了a线程中执行。

handler 持有Looper实例,looper有持有messageQueue实例,   handler 把message发送到了 当前持有的messageQueue实例中。这个messageQueue 在new handler之前,已经通过当前线程的Looper.prepare创建了。

你可能感兴趣的:(handler是如何切换线程的)