android内存泄漏的集中状况

常见的内存泄露场景app

一、类的静态变量持有大数据对象、如Bitmap大数据

     静态变量会长期维持对对象的引用,阻止垃圾回收线程

二、非静态内部类的静态实例对象

     非静态内部类会维持一个到外部内实例的引用,若是非静态内部类的实例是静态的就会间接长期维持着外部类的引用,阻止回收生命周期

三、资源对象未关闭,如Cursor File Socket等,这种状况应该在finally中关闭内存

四、注册对象未反注册资源

     未反注册会致使观察者列表里维持着对象的引用,阻止垃圾回收get

五、Handler临时性内存泄露it

Handler经过发送Message与主线程交互,Message发出以后是存储在MessageQueue中的,有些Message也不是立刻就被处理的。在Message中存在一个 target,是Handler的一个引用,若是Message在Queue中存在的时间越长,就会致使Handler没法被回收。若是Handler是非静态的,则会致使Activity或者Service不会被回收。io

因为AsyncTask内部也是Handler机制,一样存在内存泄漏的风险。

此种内存泄露,通常是临时性的。

预防

     不要维持到Activity的长久引用,对activity的引用应该和activity自己有相同的生命周期。

     尽可能使用application context代替activity context

Activity中尽可能不要使用非静态内部类和用WeakReference代替

相关文章
相关标签/搜索