Advertisement

Android Handler内存泄漏和没有ANR原因↑

阅读量:

handler容易引发内存泄露

面试过程中常常被提及的问题:怎样才能有效防止Handler导致的内存泄漏?

所谓内存泄漏,指的是在某个对象不再被使用的情况下,仍然存在对其的引用,从而无法被垃圾回收机制回收,这种现象即为内存泄露。

若对Handler的使用方式不当,则极易导致内存泄漏问题。例如:

public class MainActivity extends Activity {

private final Handler mHandler = new Handler() {

@Override

public void handleMessage(Message msg) {

// ...

}

}

}

在上述代码中,Handler被定义为匿名内部类的形式。这种写法可能造成内存泄露。Android Lint工具通常会给出如下提示信息:

在Android系统中,Handler类应当声明为静态类型,否则可能会出现内存泄露。

那么,为什么Handler会导致内存泄露呢?

①当Android应用程序启动时,Android框架会为主线程创建一个Looper对象,用于处理由Handler发送过来的消息。该Looper会生成对应的消息队列MessageQueue,并持续循环地处理其中的消息。所有与应用程序框架相关的事件(如Activity生命周期的变化、按钮点击等)

全部评论 (0)

还没有任何评论哟~