2017-06-15 66 views
0

我们有包含多个活动的应用程序。Android:当android从内存中清除它时,销毁应用程序活动堆栈

通常的业务逻辑总是在MainActivity中运行。从MainActivity我们导航到其他具有特定数据的活动(Activity1,Activity2,...)。

它工作得很好。

但是,如果我们最小化应用程序,然后移动到其他应用程序,请等待任何时间(近5分钟)。然后再次打开(最大化)应用程序我们的活动显示空数据。

(安卓杀死我们的活动!)

是的,我们知道关于SaveInstanceState,为了这个目的而创建。但在我们的应用程序中,这不是最好的解决方案,因为我们有许多MainActivity中包含的操作。如果机器人杀死我们的活动,我们要重新打开MainActivity应用程序,而不是从活动1,活性2,...

我们MainActivity代码:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if(savedInstanceState != null) { 
     Log.w("MainActivity", "Activities already created, we after activity kill process"); 
     Intent intent = new Intent(this, MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
     finish(); 
     return; 
    } 
} 

它的作品,但我们可以用其他权利这样做办法?

+1

为什么你的mainActivity意图是重新启动mainActivity活动?如果您导航到其他活动,则不会执行任何操作。 – XepterX

+0

@XepterX谢谢,您是对的,我们可以完成其他活动而无需导航到MainActivity。 –

回答

1

“正确的方式”是改变你的整个应用程序体系结构。你的方法的一个问题是,配置变化会触发这个流程,并将用户重定向到MainActivity

2

不要打架。

保存并恢复您的实例状态。当它位于后台时,不要依赖MainActivity积极工作(甚至根本不存在)。将这些后台操作移至Service

0

您可以为每个较小的Activites设置android:noHistory="true"。这样,当您最小化之后返回到您的应用程序时,它始终始于MainActivity

编辑:一般来说,虽然,你不应该与android框架战斗,而是根据它来构建你的应用程序。

+0

谢谢。如果我们设置了NoHistory标志,它也会中断BackPress导航,但这不是解决方案。 –