Android @ 内存泄漏

情景 1:

静态变量引用或内部持有 Activity,如果 Activity 销毁时没有释放就会导致 Activity 发生泄漏。

解决方法:

  1. 在 Activity 的 onDestroy() 方法中将静态变量置空;
  2. 避免这样的写法。

情景 2:

非静态内部类(包括匿名内部类)造成内存泄漏,比如 Handler。

解决方法:

  1. 在 Activity 的 onDestroy() 方法中 remove Handler 消息队列中的消息与
    Runnable 对象。
  2. 使用静态内部类加 WeakReference(弱引用)
public static class StaticHandler extends Handler {

    private final WeakReference<Activity> mActivity;

    public StaticHandler(Activity activity) {
        mActivity = new WeakReference<Activity>(activity);
    }

    @Override
    public void handleMessage(Message msg) {
        Activity activity = mActivity.get();
        if (activity != null) {
            ......
        }
    }
}

情景 3:

如果单例中持有 Activity 的 Context,当这个 Context 所对应的 Activity 退出时,就会导致 Activity 发生泄漏,因为单例的生命周期和 Application 的一样长。

解决方法:

在单例中将 Activity 的 Context 转换为 Application 的 Context。

参考:

  1. 常见内存泄漏场景以及解决办法
  2. Android 内存泄漏案例和解析
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...
    _痞子阅读 1,661评论 0 8
  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    宇宙只有巴掌大阅读 2,427评论 0 12
  • Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...
    apkcore阅读 1,249评论 2 7
  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    DreamFish阅读 815评论 0 5
  • 话说现在社会越来越多离婚现像,到底是夫妻两人思想相差太大,观念不同,无所谓谁对谁错。 人之所以高级于动物,表现在有...
    记录自己的见闻阅读 4,687评论 0 1