如果在Android中不再可见,则由系统杀死的活动问题

时间:2012-07-26 08:40:30

标签: android android-layout android-intent android-emulator android-widget

我的应用程序中有活动(A,B,C)。当我启动应用程序时 活动A:

  A:onCreate()
  A:onStart()
  A:onResume()

使用intent我正在调用第二个活动(A - > B):

  A:onPause()
  B:onCreate()
  B:onStart()
  B:onResume()
  A:onStop()

然后我点击“主页”按钮,然后应用程序转到后台:现在

  B:onPause()
  B:onStop()

1或2小时后再次进入我的设备中的主页并单击其运行的应用程序图标:

 B:onDestroy()
 A:onRestart()
 A:onStart()
 A:onResume()

但我需要去哪一个我退出的活动,

B:onRestart()
B:onStart()
B:onResume()

我已经阅读了一些文章,它说的是由于不再可见而被系统杀死的活动。是否有可能解决我的问题......

提前致谢...

2 个答案:

答案 0 :(得分:7)

你可能会混淆两件不同的事情:

  1. 如果需要内存,Android不会杀死活动。它的作用是杀死活动正在运行的整个进程。一般来说,这意味着Android会在这种情况下杀死所有的活动。但是,它会记住活动堆栈,当用户返回应用程序时,Android将创建一个新进程,然后根据需要重新创建每个活动(依次)。它首先重新创建活动堆栈顶部的活动(即:用户离开应用程序的位置)。

  2. Android假设如果用户长时间离开任务(我认为这类似于30分钟),那么他就不再对该任务感兴趣了没有必要记住用户在该任务的活动堆栈中的位置,因为他可能不再关心了。在这种情况下,当用户返回任务(或重新启动该任务中活动堆栈顶部的应用程序)时,Android只需将任务清除回根活动 。这样看起来应用程序似乎重新开始。这是期望的(并记录在案的行为)。

  3. 您要做的是阻止Android在情况#2中清除任务。你可以通过添加

    来实现
        android:alwaysRetainTaskState="true"
    

    根活动<activity>标记(即:启动您的应用的活动,ACTION_MAINCATEGORY_LAUNCHER的活动。

答案 1 :(得分:1)

我不相信这是你可以肯定控制的。如果你的活动在很多时候处于后台,同时其他应用程序需要内存,系统会终止你的活动以释放内存。