问题与活动,如果不再显示在Android的

问题描述:

我有没有被系统终止活动(A,B,C)我Application.When i内启动应用程序 活动答:问题与活动,如果不再显示在Android的

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

使用意图我是调用第二项活动(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() 

我看了一些文章,它说这样的活动由因为不再visible.Is有任何可能的系统杀死解决我的问题...提前

谢谢...

+0

你可以发布你的活动A和B的代码吗? – Dharmendra 2012-07-26 11:37:29

您可以在这里混淆了两个不同的东西:如果它需要的内存

  1. Android不杀死一个活动。它所做的是杀死整个活动正在运行的进程。通常,这意味着Android在这种情况下会杀死所有您的活动。但是,它会记住活动堆栈以及用户何时返回到应用程序,Android将创建一个新进程,然后重新创建每个活动(依需要进行)。它首先重新创建活动堆栈顶部的活动(即:用户离开应用程序的位置)。

  2. Android的假设是,如果用户离开任务为很长一段时间(我认为这是一样的东西30分钟),那么他就不再感兴趣的是任务,没有一点回忆当时在用户处于该任务的活动堆栈中,因为他可能不在乎了。在这种情况下,当用户返回任务(或重新启动该任务中活动堆栈顶部的应用程序)时,Android会简单地将清除回到根活动。这有一个效果,看起来应用程序是从头再来。这是所需的(并且记录下来的行为)。

你想要做的是阻止Android清除situarion#2中的任务。您可以通过添加

android:alwaysRetainTaskState="true" 

根系活力(:启动应用程序时,一个与ACTION_MAINCATEGORY_LAUNCHER活动IE)的<activity>标签做到这一点。

+0

哦,非常感谢你为你的整洁的解释大卫.... – Srinivasan 2012-07-27 05:15:42

我不相信这是你可以控制的东西。如果您的活动处于后台很长时间,同时其他应用程序需要内存,则系统将终止您的活动以释放内存。

+0

是的,我知道安迪,但我的客户的要求是应该重新启动哪一个我退出...但一些应用程序保持这样我不知道如何? – Srinivasan 2012-07-26 08:46:31

+1

然后我相信你应该考虑做一个自定义的实现。例如,每次打开活动B时,都会在onCreate()中写入SharedPreferences中的标志,并在onDestroy()上删除该标志。 现在当活动A开始时,请检查该标志的SharedPreferences。如果标志被设置,这意味着活动B被打开,但是系统杀死了她(因为id没有通过onDestroy()来通过删除该标志),因此,从那里将用户重定向到活动B.如果没有设置标志,则什么也不做。这是一个想法... – 2012-07-26 08:55:10

+0

但是,这也是从第二个Activity的onCreate(),所以它不会保留任何值。 – Srinivasan 2012-07-26 09:30:56