Android的开发规范整理之Handler的使用
1.关于Handler的使用,在Activity或者Service中使用Handler,通常会使用匿名内部类的方式来定义handler,但是这种方式,开发工具会报出This Handler class should be static or leaks might occur 。意思是,Handler类应该定义为static的,否则会造成内存泄漏。推荐使用如下的代码解决这个问题:
private static class UIHandler extends Handler{
WeakReference<AddCheckTeskActivity> mActivity;
private UIHandler(AddCheckTeskActivity activity) {
mActivity = new WeakReference<AddCheckTeskActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
AddCheckTeskActivity act=mActivity.get();
//调用所在activity的实例方法
act.generateLawDialog();
//调用所在activity的实例变量的方法
act.lawDialog.show();
DialogUtils.closeDialog();
}
}
在Handler中把对Activity的引用定义为WeakReference的,WeakReference表示在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存,
2.子线程中使用Handler的方式:
定义子线程的Callback类:
class ChildCallback implements Handler.Callback {
@Override
public boolean handleMessage(Message msg) {
//耗时的代码
return false;
}
}主线程中定义HandlerThread ,并且启动线程
HandlerThread handlerThread = new HandlerThread("downloadImage");
//必须先开启线程
handlerThread.start();在需要的使用ChildCallback创建Handler,并且发送消息:
childHandler = new Handler(handlerThread.getLooper(),new ChildCallback()); childHandler.sendEmptyMessage(0);
相关推荐
ChainDestiny 2020-05-07
doomvsjing 2020-05-07
ChainDestiny 2020-04-08
bearhoopIT之道 2020-08-16
Kakoola 2020-08-01
凯哥Java 2020-07-04
haidaoxianzi 2020-07-04
delmarks 2020-06-28
aNian 2020-06-16
qingjiuquan 2020-06-07
fraternityjava 2020-06-04
明瞳 2020-06-04
HappyHeng 2020-05-28
88473166 2020-05-14
zkwgpp 2020-05-07
oXiaoChong 2020-05-07
xuMelon 2020-05-04