LotusLoveNature

日常工作,生活小记

Handler Looper Message Callback HandlerThread

      昨天花了两个小时时间,整理了思绪,对这几个android比较常用的类进行了梳理。

     直接说,当用户要发消息给handler处理时,开始就会new一个message,当执行了handler.sendMessage或 msg = Message.obtain(handler);时,handler和message的关系就绑定好了,message.gettarget可以获得handler。

      handler与Looper的关系呢,handler要new吧,那么在new的同时,你可以传入参数Looper, callback。但是如果是不需要在新线程及工作线程中处理消息,就不用传looper参数,因为ui主线程本身有默认的looper。这种在主线程中调用handler sendmessage一般用于post 一个runnable,延迟调用。更大的作用是在子线程中调用handler sendmessage将消息插于主线程消息队列中等待执行。这样就可以解决工作线程更新ui的问题。

       这里Looper是个抽象概念,里面还包含他的消息队列。

      接上一段,如果再new handler中传一个子线程的looper,会怎么样呢,首先他的作用就是,message会放到子线程的消息队列中等待子线程自己的looper再调用执行,这里很明显的一个例子就是HandlerThread,可以看HandlerThread了解其工作原理。这个用法很实用,很常见,主要应用于有多个异步消息需要处理的情况。

       Handler与Callback的关系呢,这里的callback指handlerMessage这个重载方法。上面说到了,callback可以再new Handler的时候当参数传进去。当然你也可以继承Handler,重写handlemessage方法。

评论
©LotusLoveNature | Powered by LOFTER