Activity OnDestroy从未调用过?

时间:2010-12-15 12:40:34

标签: android ondestroy

我在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方法?

3 个答案:

答案 0 :(得分:56)

仅当系统资源不足(内存,CPU时间等)时才会调用

onDestroy(),并决定终止您的活动/应用程序,或者当某人在您的活动上调用finish()时。 / p>

因此,要测试代码(),您可以制作一个测试按钮,在您的活动中调用finish()

了解更多here

另外,我相信你不需要在onDestroy()中调用所有这些东西,直到adap不是关键资源。即使在这种情况下,android系统也有适当处理它们的机制。

答案 1 :(得分:27)

无法保证您的onDestroy方法完全被调用。

根本不需要在onDestroy方法中使用的代码。如果调用destroy,您的acitivity将从堆栈中删除,并且无论如何都可以自由进行垃圾收集,其中包含仅由活动引用的所有资源。 System.gc()也应该是糟糕的风格。在Android上,系统几乎总是知道何时是进行垃圾收集的最佳时间。大多数情况下,活动完成垃圾收集会自动触发。只需删除整个onDestroy方法即可。如果您的应用程序的整体内存有问题,则问题出在其他地方。

答案 2 :(得分:5)

在大多数手机中按下后退按钮时,会在onStop()和onDestroy()方法中调用两次,但如果不是这种情况,则可以创建一个按钮来调用finish();方法