Handler、Looper

一:Looper和Handler模型:

二:怎样在thread中使用Looper和Handler

  1. 方法介绍:
  2. 使用示例:

三:对MessageQueue消息队列的介绍

 

 (Message.obtain从消息池中取一个Message避免创建过程,提高效率)

四:如何与main thread主线程交流

五:使用HandlerThread来简化在一个thread中创建looper和handler

 

 感觉自定义一个thread来继承HandlerThread没什么意思,第二种方法看起来实用性更强。HandlerThread内部自带looper,方便很多。

一个继承HandlerThread的例子:

class MyThread (name:String):HandlerThread(name){
    init {
        start()//这一步进行之后,自带的looper也prepared了,才能和一个handler绑定
    }
    private val handler:Handler = Handler(looper)

    fun execute(task:Runnable):MyThread{
        handler.post(task)
        return this
    }
}

六:感悟

一个handler和一个looper即thread来绑定,如果handler绑定后台looper(后台线程),那它执行的任务就是在后台进行。如果想和main thread通信,想在main thread中去更新UI或其他事情,就搞一个handler,拿它来和main thread的looper绑定,然后把消息传给这个handler就可以了。

对于想handler帮做事,如果要发送Message给它,则得override这个handlerMessage方法;亦或发送一个runnable对象给它也可以。如果发送Message又没有override Handler本身的handleMessage的话,就什么也不做,因为Handler本身的handleMessage是空的。

/**
     * Subclasses must implement this to receive messages.
     */
    public void handleMessage(@NonNull Message msg) {
    }

当然handler的构造函数里有提供callback的这个构造函数,其实这个会使用这个callback当handleMessage来使用,这种时候就不用另外override handleMessage。


**
* Callback interface you can use when instantiating a Handler to avoid
* having to implement your own subclass of Handler.
*/
public interface Callback {
/**
* @param msg A {@link android.os.Message Message} object
* @return True if no further handling is desired
*/
boolean handleMessage(@NonNull Message msg);
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值