使用Handler可能导致内存泄漏?

时间:2011-08-25 19:51:49

标签: android memory memory-management

这种代码会导致Android内存泄漏吗?

class MyActivity extends Activity {

    Runnable myRunnable =new Runnable() {
        public void run() {
            // Do something here
        }
    };

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);
        Handler = new Handler();
        Handler.postDelayed(myRunnable, 2000);
    }
}

在上面的代码中,myRunnable强烈引用MyActivity,myRunnable被添加到线程消息队列中。当MyActivity关闭时,MyActivity实例仍然被全局消息队列强引用,因此这里可能存在内存泄漏。

我明白了吗?

2 个答案:

答案 0 :(得分:1)

我认为没有内存泄漏。系统会在2秒后调用Runnable,此消息将从MessageQueue中删除。

答案 1 :(得分:0)

实际上,消息可能会卡在队列中。

如果你的MyRunnable中有一个长时间运行的操作将有activity.finish()系统将没有时间从队列中删除你的消息,它将在你下次运行你的活动时执行(假设完成( )没有完全关闭你的应用程序)

作为避免内存泄漏的好习惯,请尝试使内部类静态