android消息机制

消息机制由Handler/Looper/MessageQueue/Message这4个类构成,Android的四剑客Activity,Service,Broadcast,ContentProvider的启动过程和交互,都离不开消息机制,Android某种意义上可以看做是一个消息驱动的系统。

这张图解释了app进程和系统进程之间如何通信:

android消息机制_第1张图片
image

我自己总结为

  1. ActivityThread为一个app的入口,有main函数。
  2. main函数中执行Looper.loop(),里面执行死循环,来监听收到的消息
  3. 消息是Message以消息队列MessageQueue形式存在,而Handler是消息辅助类用来分发消息。
  4. 当MessageQueue中消息为空时,阻塞并退出死循环,执行idleHandler线程,如果没有则执行Linux的epoll操作,进入cpu休眠
  5. ActivityThread的main函数中通过thread.attach(false)创建一个Binder线程(具体是指ApplicationThread,Binder的服务端,用于接收系统服务AMS发送来的事件),该Binder线程通过Handler将Message发送给主线程,同时拥有binder客户端(ActivityManagerProxy),用来向系统进程system_server发送事件消息。
  6. ActivityThread当有消息到达时,通过往pipe管道写端写入数据唤醒主线程工作,也是用的epoll机制(当然这是linux的知识)

注意:
ActivityThread不是线程,不是线程,没有继承自HanderThread,看起来像线程而已,运行在Zygote fork出来的进程里(Zygote是Android特有的进程,从Linux开机启动的init进程fork出来,直译为受精卵进程,也就是Android所有进程都从Zygote fork出来)

参考资料

Android消息机制1-Handler(Java层)
初识Zygote进程
知乎Android中为什么主线程不会因为Looper.loop()里的死循环卡死?中@Gityuan的回答

你可能感兴趣的:(android消息机制)