Android 使用处理程序可能出现内存泄漏?
这种代码会导致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
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()
实现。