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

时间:2011-08-03 17:47:09

标签: java android lifecycle

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

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

onCreate
onStart
onResume
onPause
onStop
onRestart
onStart
onResume

但是,如果我将应用程序导出到APK并通过电子邮件安装,我会收到此行为:

onCreate
onStart
onResume
onPause
onStop
onCreate ******
onStart
onResume

...这是完全相同的,除了这次重新打开应用程序时调用onCreate。

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

谢谢,

史蒂芬

2 个答案:

答案 0 :(得分:0)

要回答这个问题,我将不得不断言几个假设。 1)您正在通过放置在活动事件中的日志来跟踪生命周期 2)关于系统没有其他任何改变 3)他们的调试器有助于在停止时保持活动

您可能没有指示是否调用onDestroy()。 onCreate()仅在创建活动时被调用(而不是从停止状态恢复)。

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

你可能已经读过这篇文章但是你走了: http://developer.android.com/reference/android/app/Activity.html

答案 1 :(得分:0)

从我的观点来看,Pyrodante的答案并非100%正确(我不能写评论,所以我必须写一个答案):

如果两个列表都正确,则不会在调试器和apk变体中调用

OnDestroy()。这是没有意义的:onDestroy()仅在活动被销毁(达到生命结束时)时被调用。因此onCreate()永远不会在onDestroy()之后被相同的活动对象调用。

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

请参见下图。有时对我来说,拿铅笔并在其中绘制箭头,我的应用程序的运行方式: Android Lifecycle Methods