Android 使用处理程序可能出现内存泄漏?

Android 使用处理程序可能出现内存泄漏?,android,memory,memory-management,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.onCr

这种代码会导致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实例仍被全局消息队列强引用,因此此处可能存在内存泄漏


我理解对了吗?

我想没有内存泄漏。
Runnable
将在2秒内被调用,并且此消息将从
MessageQueue
中删除。实际上,消息可能会卡在队列中

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


作为避免内存泄漏的良好实践,尝试将内部类设置为静态的

是否有可能使runnable卡在消息队列中?我认为没有。请查看
Looper.loop()
MessageQueue.next()
实现。