每一个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进行处理。