创建了一个对象,用完之后如果没有让回收机制回收,那么就是内存泄漏 (memory leak),由于一直占用着内存,长期的内存泄漏就是导致内存溢出(out of memory )
所以继承Handler的内部类一定要是静态的,并且对所在的activity弱引用,这样引用的外部类才能被回收
为什么要设计成静态的内部类呢?
因为静态内部类不能访问外部类的非静态成员,这样就避免了对外部类的强引用,断开了和外部类的联系,这样外部类就能回收了,但实际上handler类有可能会用到外部类的成员,所有就设计成静态内部类,并对外部类对象弱引用,需要外部成员,就通过弱引用的外部类对象调用
static class MyHandler extends Handler {
WeakReference mActivity;
MyHandler(PopupActivity activity) {
mActivity = new WeakReference(activity);
}
@Override
public void handleMessage(Message msg) {
PopupActivity theActivity = mActivity.get();
switch (msg.what) {
case 0:
theActivity.popPlay.setChecked(true);
break;
}
}
};