Activity OnDestroy从未调用过?

UMA*_*MAR 27 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

任何人都指导我为什么onDestroy在我的代码中没有调用方法?

Vla*_*nov 58

onDestroy()仅当系统资源不足(内存,CPU时间等)时才会调用,并决定终止您的活动/应用程序或者当某人调用finish()您的活动时.

因此,要测试您的代码(),您可以创建一个测试按钮,该按钮将调用finish()您的活动.

在这里阅读更多.

此外,我相信你不需要调用所有这些东西,onDestroy()直到adap不是一个关键资源.甚至在那种情况下,android系统也有适当处理它们的机制.

  • 当调用 onDestroy 的时间完全错误时,为什么会有 60 票赞成和正确答案? (6认同)
  • onDestroy不仅在系统资源不足时调用.当"活动"不再可达时,也会调用它 (3认同)
  • 每当您旋转设备时也会调用它,因为它的特性发生了变化(即方向),这可能会影响使用的资源,因此它会销毁并创建 Activity。onDestroy() 之后调用 onCreate()。 (2认同)

Jan*_*usz 28

无法保证您的onDestroy方法将被调用.

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

  • 它很有趣,但这里的图像有点说onDestroy将永远被调用.如果您阅读文本,那么也会说:"活动的整个生命周期发生在对onCreate()的调用和对onDestroy()的调用之间." http://developer.android.com/guide/topics/fundamentals/activities.html#Lifecycle (6认同)

Jor*_*rgo 5

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

  • 不,此功能通常在开发者选项 - “不保留活动”复选框中打开。 (2认同)