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);

相关推荐