美文网首页
Android @ 内存泄漏

Android @ 内存泄漏

作者: sneider | 来源:发表于2017-08-31 11:12 被阅读0次

    情景 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 @ 内存泄漏

          本文链接:https://www.haomeiwen.com/subject/wmutjxtx.html