最近对Handler有了一个新的认识,以前对于handler的使用大多是在Activity和service中,用着还挺舒服挺好的。但是最近写一个业务实现类的时候,发现使用handler会报错,百思不得其解,使用方式和以前是一样的。后来经过高人指点,原来,activity和service本身是有生命周期的,handler可以随着他们的生命周期开始和靠岸。对于普通的java类,本身是无生命周期的,因此按照以前handler的使用方式,是行不通的。但是在这个业务实现类里面,我必须使用handler,那么怎么办呢?后来看了framework层的代码,发现了一种很巧妙的方法。
1.声明一个HandlerThread,代码如下:
private HandlerThread ht;
2.在构造方法中实例化并且启动这个线程,代码如下:
public MyTest() {
ht = new HandlerT("MyTest");
ht.start();
}
HandlerThread中的参数没有特别的规定,只要是一个字符串就可以了。
3.自定义一个hander,代码如下:
public class MyHandler extends Handler {
public MyHandler(Looper looper) {
super(looper);
@Override
public void handleMessage(Message msg) {
}
}
4.实例化handler,代码如下:
MyHandler mMyHandler = new MyHandler(ht.getLooper());
MyHandler通过HandlerThread获取了一个Looper,其他使用方式,和在Activity和Service中是一样的。