35

onDestroy()并不总是被调用。如果调用,则只执行部分代码。而且大多数时候在LogCat中我只看到消息“首先调用破坏时的 gps 状态”。这是为什么?

protected void onDestroy() {
    super.onDestroy();
    Log.d("on destroy called", "gps state on destroy called first");

    editor.putBoolean("gpsOn", false);
    Log.d("on destroy called", "gps state on destroy called second");
    editor.commit();

    Log.d("on destroy called", "gps state on destroy called third");
    stopRouteTracking();
    Log.d("on destroy called", "gps state on destroy called  fourth");
}
4

3 回答 3

24

看看这个:

Activity OnDestroy 从未调用过?

还有这个:

http://developer.android.com/reference/android/app/Activity.html#onDestroy%28%29

基本上,永远不会保证onDestroy()会被调用,并且在某些情况下,诸如您的应用程序之类的进程将被直接杀死,无论如何都会绕过方法调用。

于 2013-08-21T15:40:46.220 回答
14

在此处的 android 开发人员文档中,您可以看到 -

对于那些被标记为可终止的方法,在该方法返回后,托管该活动的进程可能随时被系统终止,而无需执行另一行代码。因此,您应该使用 onPause() 方法将任何持久性数据(例如用户编辑)写入存储。

并且 onStop() 和 onDestroy() 都被标记为可杀死。

这可能是只有在 onDestroy() 中编写的部分代码被调用的原因,因为进程可以在执行 onStop() 后的任何时间被销毁。

于 2016-09-24T07:51:48.473 回答
1

@Chris 的回答是正确的,但是super.onDestroy()在调用您的代码之前,您可能会出现仅调用部分代码的问题。super.onDestroy()应该在最后调用,因为这样你的代码将在它被销毁之前被调用。

于 2016-07-11T00:18:44.680 回答