我的活动被销毁后我应该调用一行代码,所以我覆盖了onDestroy()
方法,我在里面调用它。像这样:
@override
public void onDestroy(){
//my code here
super.onDestroy()
}
现在我注意到,当我的活动结束时,并不总是执行这行代码。
我读到了这个,有些人说不依赖于onDestroy()
方法来打电话。
我的问题是我需要调用onDestroy()
中的代码,我希望它始终有效。有什么想法吗?如果我们不能依赖它来执行,那么为什么onDestroy()
首先被发现?
答案 0 :(得分:1)
依靠onDestroy()
进行清理工作并不是一个好主意。最好在onPause()
或onStop()
中执行这些操作。这些是当您的活动不在视图时系统调用的回调方法。
答案 1 :(得分:0)
现在我注意到,当我的活动结束时,并不总是执行这行代码。
或者:
onDestroy()
被调用,或
您因未处理的异常而崩溃,或
您的流程已终止(例如,用户已撤消设置的运行时权限,Android需要RAM匆忙)
我读到了这个,有些人说不依赖于onDestroy()方法来调用它。
正确。假设您的应用继续正常运行,onDestroy()
用于清理事物。但是,如果您的应用不再正常运行(您已崩溃)或您的应用已消失(流程已终止),则onDestroy()
无效。
我需要调用onDestroy()中的代码,我希望它始终有效。有什么想法吗?
您需要重新考虑这两个要求,因为它们不可能都是真的。在onStart()
初始化并在onStop()
中清理,或者可能不会调用您的清理代码这一事实。即使onStop()
方案也未得到完全保证 - 在多窗口环境中,用户可以在您的应用仍然可见时撤消设置中的运行时权限 - 但我们会进入相当不太可能的情况。
答案 2 :(得分:0)
我们无法保证onPause
会被调用,但我依靠Activity
通过调用if( isFinishing() ) // activity is about to finish
检查onDestroy
是否正在完成但是这可能不会好好工作。
我重新考虑过我的逻辑,完全不依赖boolean isFinishing ()
。
{{1}}
检查此活动是否正在完成, 要么是因为你在上面调用了finish(),要么就是其他人要求的 它完成了。这通常用于onPause()来确定是否 活动只是暂停或完全结束。
https://developer.android.com/reference/android/app/Activity.html#isFinishing%28%29
答案 3 :(得分:0)
这些是系统调用该方法的方法,这些方法在程序员显式调用时将崩溃...