new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Log.d("log", "runFinish");
}
}, 10000);
如果 Activity 中存在上述代码,当 Runnable 的 run() 方法未被调用时直接按返回键退出会出现内存泄漏,泄漏原因是非静态内部类或匿名内部类会持有一个外部类的实例,所以按返回键后 Activity 实例并不能被回收导致内存泄漏。
正确的做法是在 onBackPressed() 或 onDestroy() 时将 Handler 的 callback remove 掉,
handler.removeCallbacks(runnable);
如果采用 sendMessage 的方式的话则 remove 掉对应的 message ,
handler.removeMessages(what);
另一种做法是以静态内部类方式来实现 Handler ,
static class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
}
方法可行的原因是静态内部类不持有外部对象。