android Looper& Handler

来源:互联网 发布:三菱编程手册da 编辑:程序博客网 时间:2024/06/06 04:25

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

                                                       

 


                                                                    


原创粉丝点击