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)
还没有任何评论哟~
