32

我在我的 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在我的代码中没有调用方法?

4

3 回答 3

62

onDestroy()仅当系统资源不足(内存、cpu 时间等)并决定终止您的活动/应用程序或有人调用finish()您的活动时才调用。

因此,要测试您的 code(),您可以制作一个测试按钮,该按钮将调用finish()您的活动。

在这里阅读更多。

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

于 2010-12-15T12:43:45.967 回答
28

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

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

于 2010-12-15T12:52:37.733 回答
5

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

于 2013-05-15T02:50:18.263 回答