问题描述
@Override
public void onDestroy() {
super.onDestroy();
for (int i = 0 ; i < 10; i++) {
Toast.makeText(this,"Destroy " + i,Toast.LENGTH_SHORT).show();
}
}
for
循环在索引 2 处停止。为什么循环没有结束?
解决方法
首先 documentation 表示 onDestroy()
方法:
不应该被用来做那些在过程消失后仍然存在的事情。
和:
此方法通常用于释放与活动关联的线程等资源
同样在 docs on the Activity 的开头有一个注释,方法 onDestroy()
和 onStop()
是 killable
:
标记为可终止的方法,在该方法返回托管活动的进程后,系统可能随时终止其另一行代码,而无需执行其他代码。
并且建议使用 onPause()
方法而不是那些可杀死的方法。
因此,显然 onDestroy()
函数有一些 android 内部超时,如果它没有发生太长时间,它可能会控制它,如果它发生了,那么它可能会终止执行。这是我的猜测。
根据文档中的内容,我将避免使用此方法来执行您在此处执行的操作,而我将尝试使用 onPause()
方法。
如果代码旨在仅在应用程序完成时执行,则使用 isFinishing()
方法检查它。 docs 推荐这种方法:
检查此活动是否正在完成,因为您对其调用了 finish() 或其他人要求它完成。这通常用于 onPause() 来确定活动是简单地暂停还是完全结束。
,@sweak 的回答几乎解释了为什么你不应该这样做。但如果你热衷于这样做。你可以像下面那样完成 for 循环并给出所有 10 个 toast 的输出。
@Override
public void onDestroy() {
for (int i = 0 ; i < 10; i++) {
Toast.makeText(this,"Destroy " + i,Toast.LENGTH_SHORT).show();
}
super.onDestroy();
}