-2

我有一行代码应该在我的活动被销毁后调用,所以我覆盖onDestroy()了方法并在里面调用它。像这样:

   @override
   public void onDestroy(){

     //my code here

     super.onDestroy()  

   }

现在我注意到,当我的活动完成时,这行代码并不总是执行。

我读到了这个,有人说不依赖于onDestroy()调用方法的方法。

我的问题是我需要从中调用代码,onDestroy()并且我希望它始终有效。对此有什么想法吗?onDestroy()如果我们不能依赖它来执行,为什么会首先找到它?

4

4 回答 4

1

依赖于onDestroy()您的清理工作不是一个好主意。最好在onPause()或中执行这些操作onStop()。这些是当您的活动消失时系统调用的回调方法。

于 2018-04-01T16:53:14.310 回答
1

现在我注意到,当我的活动完成时,这行代码并不总是执行。

任何一个:

  • onDestroy()被称为,或

  • 您因未处理的异常而崩溃,或者

  • 您的进程已终止(例如,用户从设置中撤消了运行时权限,Android 急需 RAM)

我读到了这个,有人说不要依赖 onDestroy() 方法来调用一些东西。

正确的。onDestroy()假设您的应用程序继续正常运行,则用于清理事物。但是,如果您的应用程序不再正常运行(您崩溃了)或您的应用程序消失了(进程终止),onDestroy()则无关紧要。

我需要从 onDestroy() 调用代码,我希望它始终有效。对此有什么想法吗?

您将需要重新考虑这两个要求,因为它们不可能同时为真。要么在 中初始化onStart()并清理onStop(),要么忍受你的清理代码可能不会被调用的事实。即使是这种onStop()情况也不能完全保证——在多窗口环境中,用户可以在你的应用程序仍然可见时撤销设置中的运行时权限——但我们正在进入相当不可能的情况。

于 2018-04-01T17:26:02.823 回答
0

这些是当程序员显式调用它们时它们将崩溃的方法的系统调用......

于 2019-07-19T06:43:59.063 回答
0

不能保证onDestroy它会被调用,但我不得不依靠 调用onPause来检查它是否Activity正在完成,if( isFinishing() ) // activity is about to finish但这可能无法正常工作。

我重新思考了完全不依赖的逻辑onDestroy

boolean isFinishing ()

检查此活动是否正在完成过程中,或者是因为您在其上调用了 finish() ,或者其他人已请求它完成。这通常用于 onPause() 来确定活动是简单地暂停还是完全结束。

https://developer.android.com/reference/android/app/Activity.html#isFinishing%28%29

于 2018-04-01T17:39:48.137 回答