android常见内存泄漏

一般来说,内存泄漏都是因为泄漏对象的引用被传递到该对象的范围之外,或者说内存泄漏是因为持有对象的长期引用,导致对象无法被 GC 回收。为了避免这种情况,我们可以选择在对象生命周期结束的时候,解除绑定,将引用置为空,或者使用弱引用。

1、由于 Context 导致内存泄漏。使用 Application Context 代替 Activity Context,避免长期持有 Context 的引用,引用应该和 Context 自身的生命周期保持一致。
2、由于非静态内部类、匿名内部类导致内存泄。它们会隐式的持有外部类的引用,一不小心长期持有该引用就会导致内存泄漏,使用静态内部类来代替它们。
3、Handler 导致内存泄漏。原因和第二点一样,同样使用静态内部类的实现方式,同时对需要引用的对象/资源采用弱引用的方式。
4、EventBus导致内存泄漏。EventBus 的单例特性,会长期持有注册对象的引用,一定要在对象生命周期结束的时候,接触注册,释放引用。同样对于系统提供的一些成对出现的方法,我们也需要成对的调用,例如 BroadcastReceiver 的 registerReceiver( ) 方法和 unRegisterReceiver( ) 方法。
5、线程导致内存泄漏。我们经常会执行一些长期运行的任务,避免在这些任务中持有 Activity 对象的引用,如果持有了引用的话,我们应该在对象生命周期结束的时候,释放引用。
6、属性动画导致的内存泄漏,用完记得cancel()掉;如果是自定义View中含有属性动画,在

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        //关闭线程和动画
        cancelAnimation();
    }

7、TypedArray使用记得调用recycle()。

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

推荐阅读更多精彩内容