0
点赞
收藏
分享

微信扫一扫

Handler内存泄露的原因

萍儿的小确幸 2022-02-13 阅读 66

内存泄露原因:当一个对象已经不再被使用时,本该被回收但却因为有另外一个正在使用的对象持有它的引用,从而导致它不能被回收。

解决方案1:在Java中,非静态内部类或匿名内部类都默认持有外部类的引用,使用Handler时,需将Handler对象申明为静态变量或使用弱引用。当Handler内消息队列未处理完(或延时处理消息时),不持有外部引用,不影响外部对象的注销回收。

解决方案2:当外部类对象结束生命周期时,清空Handler内消息队列。比如在Activity的onDestroy()方法中清空消息队列:

@Override
protected void onDestroy() {
    super.onDestroy();
    // 外部类Activity生命周期结束时,清空消息队列,结束Handler生命周期
    mHandler.removeCallbacksAndMessages(null);
    mHandler = null;
}

举报

相关推荐

0 条评论