Android Handler

一、handler 是什么?

       更新ui。

       发送消息,处理消息。

二、handler 怎么用?

       sendMessage

       sendMessageDelayed

       post(Runnable)

       postDelayed(Runnable,long)

三、handler 的目的

      最根本的目的是解决多线程并发问题。

      假设如果在一个Activity中,有多个线程去更新UI,并且没有加锁机制,那么就会更新界面错乱

      如果对更新UI的操作都进行加锁处理,又会引起性能下降。

      对于以上问题的考虑,android给我没提供了一套更新UI的机制,我们只需要遵循这样的机制就可以了。不用去关系多线程问题,所以更新UI的操作,都是在主线程的消息队列中轮询处理的。

四、那么Handler Looper 与 MessageQueue 是如何关联的呢?

    1、 Looper: 自定意线程中的prepare():

    

  注意:主线程启动时调用的是 prepareMainLooper()

       

        

       2、而同时,Looper同时绑定了一个MessageQueue(作为属性);

      

       3、Handler()中又与Looper,looper.messageQueue关联。

       

      

         

          4、至此完成三者绑定。

          5、Looper.loop() 的调用,导致MessageQueue 开始循环工作,取出message,调用message.target——> handleMessage()

              

                

        补充说明:handler.sendMessage ——>间接调用如下方法,将MessageQueue中的Message.target设置成发送Message的handler自身

                

五、android中更新UI的几种方式

       1、handler.sendMessage();

       2、handler.post(Runnable);

       3、runOnUIThread(Runnable); 

              (2、 3、都是通过在UI线程中 新建一个handler对象,通过最终调用handler中的达到,调用handleCallback(msg),从而调用runnable.run())

                                                                      

 

       4、view.post(Runnable);

       本质上都是通过handler更新UI。

 

posted @ 2016-08-20 18:41  月是故乡明95  阅读(124)  评论(0编辑  收藏  举报