每一个apk应用程序进程都是由zygote这个孵化进程fork出来的,通知zygote执行这个操作的是system_server进程中的 ServerThread线程中的ActivityManagerService这个对象发出的, ActivityManagerService.sartActivity( )

----> ActivityStack.java

----->Process.start(“android.app.ActivityThread” ) //通过socket向zygote进程发出一个孵化请求,然后让该进程执行参数指定的类中main函数,所以每个apk进程的入口点是ActivityThread类中的main函数。

ActivityThread.main( )

1) ------>Looper.prepareMainLooper( ); //使该线程成为一个Looper线程

----->Looper.prepare( )

----> new Looper( ) //一个Looper对应一个MessageQueue

--->Looper.mQueue = new MessageQueue( )

2)-------->new ActivityThread( );



3)--------->Looper.loop( ); // 进入消息循环分派和处理

----> while (true) {

Message msg = queue.next( ); //从消息队列中获取一个消息

msg.target.dispatchMessage(msg); //分派消息给handler进行处理,target的类型为Handler.


Handler的作用:作为线程间通信的一种方式,也正如名字所暗示的一样为消息的处理者。

new Handler( ) //构造函数里

----> Handler.mLooper = Looper.myLooper( ) //对当前线程Looper的一个引用

-----> Handler.mQueue = mLooper.mQueue( ) //有了Looper的引用,MessageQueue的引用就显而易见了,因为Looper和MessageQueue是同生同灭的。


Handler.dispatchMessage( msg) //在分配消息的函数里进行消息的处理,按3个优先级进行处理,首先是Message自定义的回调函数,其次是Handler中的CallBack, 最后才是Handler中的handleMessage(msg), 一般前两种都是为null的,在自定义的Handler中,一般是覆盖handleMessage方法。

------>if (msg.callback != null)

handleCallback(msg); //第一优先级

else {

if (mCallback != null) { //第二优先级

if (mCallback.handleMessage(msg))

return;

handleMessage(msg); //最后处理

}

Handler.sendMessageAtTime(msg, time)

----->msg.target = this //当利用handler向一个线程的MessageQueue发送一个Message时,会将Message的target设定为自己,所以在消息处理的时候就由这个Handler进行处理。


一个线程只能有一个Looper, 但可以有多个Handler.利用每一个Handler发送消息时分别由相应的Handler进行处理。



更多相关文章

  1. 一款霸榜 GitHub 的开源 Linux 资源监视器!
  2. 显示所有APP的进程详细信息(进程ID、进程所在UID、进程占用内存、
  3. android,JNI创建进程,使用fork()
  4. Android(安卓)wifi连接
  5. 【Android】进程通信IPC——Messenger
  6. Android中在WebView中使用javascript
  7. Android(安卓)SystemServer学习之二
  8. Android(安卓)synchronized用法
  9. Android通过PendingIntent实现消息通知

随机推荐

  1. Android 浅析 ButterKnife (一) 使用
  2. android 如何使用jni
  3. android 拖动图片移动效果
  4. 如何判断android 短信发送(sendTextMessa
  5. android按两次后退键退出程序
  6. Android studio 报错 Plugin with id 'co
  7. android之纵横屏幕切换时保存数据
  8. android 跳转到系统相册选择图片
  9. android异步操作AsyncTask编写文件查看器
  10. android mina 客户端无法接收信息的原因