About the Activity memory leak

作者: qingwenLi | 来源:发表于2016-07-26 16:11 被阅读59次

    在我们日常开发当中一不小心就会写上一丢丢内存泄露的代码。
    例如下面这一段单例模式:

    public Myactivity extends Activity{
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {    
                  setContentView(R.layout.activity_main);    
                  super.onCreate(savedInstanceState);
                  Singleton. getInstance(getContext())
        }
    }
    
    public Singleton{
        private  static Singleton INSTATIC  = new Singleton();
        
        public static Singleton getInstance(Context context) {  
            if (INSTATIC == null) {  
                INSTATIC = new Singleton(context);  
              }  
                return instance;  
         }  
    }
    

    以上的代码中当Activity 生命周期结束时,Singleton类里面却还存在Activity的引用 这样Activity占用的内存就一直不能回收,于是就内存泄露啦。
    当然啦内存泄露的例子还是很多的这里就不一一列举。

    想要避免Activity相关的内存泄露,记住以下几点:

    1. 不要让生命周期长的对象引用Activity.getContext,即保证引用Activity的对象要与Activity本身生命周期是一样的
    2. 对于生命周期长的对象,可以使用getApplicationContext()
    3. 避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对外部对象引用导致的生命周期变化。

    相关文章

      网友评论

      • MarcoHorse:最好有代码支持还有相关内存泄漏的案例!和监测方式,这些才是干货!
        qingwenLi:@MarcoHorse 我这里只是记录一下!等不忙了加段代码上去,谢谢提醒 :grin:

      本文标题:About the Activity memory leak

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