Android:当android从内存中清除它时,销毁应用程序活动堆栈

时间:2017-06-15 15:01:08

标签: java android performance

我们有包含多个活动的应用程序。

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

它运作良好。

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

(Android杀死了我们的活动!)

是的,我们知道为此目的创建的SaveInstanceState。但在我们的应用程序中,它不是最佳解决方案,因为我们在MainActivity中包含许多操作。如果android杀死了我们的活动,我们想要从MainActivity重新打开应用程序,而不是从Activity1,Activity2,...

我们的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;
    }
}

这是有效的,但我们可以用其他正确的方式吗?

3 个答案:

答案 0 :(得分:2)

不要与框架作斗争。

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

答案 1 :(得分:1)

"正确的方式"将改变你的整个应用程序架构。您的方法存在的问题是配置更改会触发此流,并将用户重定向到MainActivity

答案 2 :(得分:0)

您可以为每个较小的“活动”设置android:noHistory="true"。这样,当您在最小化后返回应用时,它将始终从MainActivity开始。

编辑:一般情况下,你不应该与Android框架作斗争,而是根据它构建你的应用程序。