1.在activity中定义这样子定义handler时,IDE会提醒你可能导致内存泄露
private Handler myHandler = new Handler()
{
handleMessage(Message mes)
{
do...;
};
};
2.导致内存泄露的原因
当你的消息队列中,有延时消息未得到处理,那么你定义的handler将无法被GC,并且你定义的handler又有Activity的引用,当你的Activityfinish时,这条消息将无法被处理,导致无法对这些对象进行垃圾回收。
3.解决办法
3.1使用静态内部类
class MainActivity extends Activity
{
private static class MyHandler extends Handler
{
private final WeakReference<MainActivity> mActivity;
public MyHandler(MainActivity main)
{
mActivity = new WeakReference<MainActivity>(main);
}
@Override
public void handleMessage(Message msg) {
MainActivity m = mActivity.get();
super.handleMessage(msg);
}
}
}
3.2将handler放在单独的类文件