Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android活动生命周期-根据安装方法的不同而不同?_Java_Android_Lifecycle - Fatal编程技术网

Java Android活动生命周期-根据安装方法的不同而不同?

Java Android活动生命周期-根据安装方法的不同而不同?,java,android,lifecycle,Java,Android,Lifecycle,我刚刚注意到我的Android 2.3.3应用程序有一些奇怪的行为。我可以编写一些额外的代码来处理它,但我想首先理解它为什么会发生 当我通过Xcode安装时(只需点击F11并正常调试),我的一个活动的生命周期如下:当我简单地启动应用程序时,让活动出现,按下设备上的home按钮关闭它(最小化它),然后再次打开它 onCreate onStart onResume onPause onStop onRestart onStart onResume 但是,如果我将应用程序导出到APK并通过电子邮件安

我刚刚注意到我的Android 2.3.3应用程序有一些奇怪的行为。我可以编写一些额外的代码来处理它,但我想首先理解它为什么会发生

当我通过Xcode安装时(只需点击F11并正常调试),我的一个活动的生命周期如下:当我简单地启动应用程序时,让活动出现,按下设备上的home按钮关闭它(最小化它),然后再次打开它

onCreate
onStart
onResume
onPause
onStop
onRestart
onStart
onResume
但是,如果我将应用程序导出到APK并通过电子邮件安装,则会出现以下行为:

onCreate
onStart
onResume
onPause
onStop
onCreate ******
onStart
onResume
。。。这完全相同,只是这次我重新打开应用程序时调用了onCreate

我看过了生命周期文档,我认为在恢复时调用onCreate之前必须先调用onDestroy?这是一个错误的假设吗

谢谢


史蒂文

要回答这个问题,我必须提出几个假设。 1) 您正在通过活动事件中的日志跟踪生命周期 2) 系统的其他方面没有改变 3) 当活动停止时,调试器将帮助保持活动的活动状态

您可能没有是否调用onDestroy()的指示符。onCreate()仅在创建活动时调用(相对于从停止状态恢复)

如假设中所述,使用的调试器可能会迫使系统在处于停止状态时保持应用程序的活动状态。当您从APK加载它时,它不在调试中,因此没有任何东西强迫它保持活动状态。一旦调用了onStop(),系统就可以通过调用onDestroy()来终止应用程序以快速释放内存。发生这种情况后,必须再次调用onCreate()(因为它已被销毁)

您可能已经读过这篇文章,但现在您可以开始:
从我的角度来看,Pyrodante的答案不是100%正确(我不能写评论,所以我必须写一个答案):

如果两个列表都正确,则不会在调试器和apk变体中调用
OnDestroy()
。这是没有意义的:
onDestroy()
仅在活动被销毁(到达生命终点)时才被调用。因此,
onCreate()
将永远不会被同一活动对象在
onDestroy()之后调用

在终止进程以释放内存的情况下:活动必须暂停(
onPause()
)或停止(
onStop()
),系统终止进程以释放内存,如果再次需要活动,则调用
onCreate()
。这是您的APK变体的情况

请参见下图。有时候,用铅笔在里面画箭头对我有帮助,我的应用程序运行的方式:

它实际上并没有连接到调试器,断开连接时它也在做同样的事情。。。然而,我意识到这不是我将代码更改为“处理这个奇怪的东西”,我的代码应该首先处理它。我无法选择生命周期的运行方式!这是一种痛苦,但它现在起作用了!这个答案一定对你有帮助---