【发布时间】:2016-05-14 07:43:02
【问题描述】:
我刚刚注意到 Activity 的 onDestroy 在 Activity 被销毁时并不总是被调用。我读了android doc,确实是这样。我想到的一件事是,当这种强制终止发生时,我们如何确保应用程序状态是干净的?考虑一下这个愚蠢的代码:
公共类 MainActivity 扩展 AppCompatActivity {
byte[] bytes = new byte[1024 * 1024 * 100];
MyThread thread;
class MyThread extends Thread {
Activity activity;
@Override
public void run() {
activity = MainActivity.this;
try {
Thread.sleep(200000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startService(new Intent(this, LongRunningService.class));
thread = new MyThread();
thread.start();
}
@Override
protected void onDestroy() {
super.onDestroy();
thread.activity = null;
Log.e("Test", "onDestroy called");
}
}
如果不能保证调用 onDestroy,那么显然会有严重的内存泄漏。我们如何处理这种清理工作?
【问题讨论】:
-
onPause()总是被称为“保存”东西的好地方。如果您使用AsyncTask而不是Thread,则可以在onPause期间取消AsyncTask,这也可以让您做更多事情。
标签: android