Android 内存泄漏

内存泄漏:指由于疏忽或错误造成程序未能释放已经不再使用的。

内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。


Android中造成内存泄漏的原因有以下几点:

1、static activity

public class MainActivity extends AppCompatActivity {
    private static MainActivity activity;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        activity=this;
    }
}

其中 activity 是静态的,App在运行时会一直存在,现在错误的把它指向MainActivity,即造成MainActivity无法被GC回收,从而造成内存泄漏。

2、static view

public class MainActivity extends AppCompatActivity {
    private static TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv=findViewById(R.id.tv_1);
    }
}

代码中TextVew 含有Context上下文,当Context 指向MainAcitivy时,就会造成MainActivity无法被回收,引起泄漏。

3、内部类

public class MainActivity extends AppCompatActivity {
    private static InnerClass innerClass;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        innerClass=new InnerClass();
    }
    class InnerClass{

    }
}

内部类含有对外部类的引用,从而造成内存泄漏

4、匿名类(AsyncTask、Handler、Thread等)

  new AsyncTask<Void,Void,Void>(){
            @Override
            protected Void doInBackground(Void... voids) {
                while (true){
                }
            }
        }.execute();

匿名类含有对外面类的引用,如果后台任务还没执行完成、或者队列中还有任务没执行,即造成内存泄漏。

参考 http://blog.nimbledroid.com/2016/05/23/memory-leaks.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...
    _痞子阅读 1,664评论 0 8
  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    宇宙只有巴掌大阅读 2,429评论 0 12
  • 【Android 内存泄漏】 引用: ★★★ 【知识必备】内存泄漏全解析,从此拒绝ANR,让OOM远离你的身边,跟...
    Rtia阅读 915评论 0 2
  • Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...
    apkcore阅读 1,257评论 2 7
  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    DreamFish阅读 818评论 0 5