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

Java Android:当Android从内存中清除应用程序活动堆栈时,销毁它,java,android,performance,Java,Android,Performance,我们有一个包含多个活动的应用程序 公共业务逻辑始终在MainActivity中运行。从MainActivity导航到其他活动Activity1、Activity2。。。具体数据 它工作得很好 但是,如果我们最小化应用程序,然后转到其他应用程序,请在5分钟左右等待。然后openmaximize应用程序再次显示空数据 安卓杀死我们的活动 是的,我们知道为此目的创建的SaveInstanceState。但在我们的应用程序中,这并不是最好的解决方案,因为我们有许多包含在MainActivity中的操作。

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

公共业务逻辑始终在MainActivity中运行。从MainActivity导航到其他活动Activity1、Activity2。。。具体数据

它工作得很好

但是,如果我们最小化应用程序,然后转到其他应用程序,请在5分钟左右等待。然后openmaximize应用程序再次显示空数据

安卓杀死我们的活动

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

我们的主要活动代码:

@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;
    }
}

这是可行的,但我们可以用其他正确的方法来实现吗?

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

正确的方法是更改整个应用程序架构。您的方法的一个问题是,配置更改将触发此流,并将用户重定向到MainActivity,而不是框架

保存并恢复实例状态。当MainActivity处于后台时,不要依赖它积极工作,甚至根本不存在。将这些后台操作移动到服务。

不要与框架对抗

保存并恢复实例状态。当MainActivity处于后台时,不要依赖它积极工作,甚至根本不存在。将这些后台操作移动到服务。

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

编辑:一般来说,你不应该反对android框架,而应该根据它来构建你的应用程序。

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


编辑:但一般来说,你不应该反对android框架,而应该根据它来构建你的应用程序。

为什么你的mainActivity打算重新启动mainActivity?如果您已导航到另一个活动,它不会起任何作用。@XepterX谢谢,您是对的,我们可以在不导航到MainActivity的情况下完成其他活动。为什么MainActivity的目的是重新启动MainActivity活动?如果您已导航到另一个活动,则它不会起任何作用。@XepterX谢谢,您是对的,我们可以在不导航到MainActivity的情况下完成其他活动。谢谢。如果我们设置了NoHistory标志,它也会中断BackPress导航,这不是这种情况下的解决方案。谢谢。如果我们设置了NoHistory标志,它也会中断反压导航,这不是这种情况下的解决方案。