当Handler创建中一个Activity中,因为handler是一个Activity的内部类,会依赖于外部类的对象,所以会隐视的获得Activity的一个对象引用,所以中handler没有处理完的时间内,Activity无法退出,依然占用内存。
所以建议使用内部类时,最好定义为一个静态内部类,不会依赖于外部类的对象。
但是处理完结果后,需要Activity中的对象(比如一个控件对象),所以应该使用弱引用。
例子:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler.post(new Runnable() {
@Override
public void run() {
//...子线程中,处理耗时操作
}
});
}
private MyHandler handler = new MyHandler(this);
/**
* 自定义MyHandler继承Handler,重写handleMessage方法
*/
private static class MyHandler extends Handler{
WeakReference<MainActivity> weakreference;
public MyHandler(MainActivity activity){
weakreference = new WeakReference<MainActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
MainActivity activity = weakreference.get();
if (activity!=null){
//...UI线程中,处理返回结果
}
}
}
}