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