我在ListActivity中使用以下代码
// a separate class in project
public class MyActivity extends ListActivity {
// some common functions here..
}
public class SelectLocation extends MyListActivity {
public void onCreate(Bundle savedInstance) {
// here.....
}
@Override
protected void onDestroy() {
super.onDestroy();
if (adap != null) adap = null;
if (list != null) list = null;
System.gc();
}
}
任何人都指导我为什么在我的代码中没有调用onDestroy
方法?
答案 0 :(得分:56)
onDestroy()
,并决定终止您的活动/应用程序,或者当某人在您的活动上调用finish()
时。 / p>
因此,要测试代码(),您可以制作一个测试按钮,在您的活动中调用finish()
。
了解更多here。
另外,我相信你不需要在onDestroy()
中调用所有这些东西,直到adap不是关键资源。即使在这种情况下,android系统也有适当处理它们的机制。
答案 1 :(得分:27)
无法保证您的onDestroy方法完全被调用。
根本不需要在onDestroy方法中使用的代码。如果调用destroy,您的acitivity将从堆栈中删除,并且无论如何都可以自由进行垃圾收集,其中包含仅由活动引用的所有资源。 System.gc()也应该是糟糕的风格。在Android上,系统几乎总是知道何时是进行垃圾收集的最佳时间。大多数情况下,活动完成垃圾收集会自动触发。只需删除整个onDestroy方法即可。如果您的应用程序的整体内存有问题,则问题出在其他地方。
答案 2 :(得分:5)
在大多数手机中按下后退按钮时,会在onStop()和onDestroy()方法中调用两次,但如果不是这种情况,则可以创建一个按钮来调用finish();方法