当应用程序对象被系统杀死时清除堆栈

And*_*rew 8 android back-stack

我有一个有很多活动的应用程序.其中有InitialActivity加载核心数据.这是一个启动器活动,如果没有加载的数据,下一个活动都无法生存.

所以我启动应用程序,InitialActivity正在加载数据,然后导航到MainActivity然后我正在浏览一些FarAwayActivity.然后我转向其他应用程序(其中一些是重型游戏),我的应用程序在后台被杀死.我已经在我的日志中插入了日志调用Application.onCreate(),当我切换回应用程序时,我可以看到它再次被调用.所以我确定应用程序在后台被杀死了.但Android带来了最后一个FarAwayActivity顶部,它立即崩溃,因为所有加载的数据都是空的.

所以问题是:我怎样才能告诉应用程序从InitialActivity什么时候开始(并且只有当它被杀死和恢复时)?类似于"忘记我的背堆",但可能是自动地,在清单中.

我已经阅读并尝试了Activity标记文档中的所有内容,但没有任何内容符合我的期望.最接近的是android:clearTaskOnLaunch="true",但是当从桌面重新启动应用程序时,它会清除堆栈上的所有其他活动(并且应用程序尚未被杀死,因此所有数据都可用).为了清楚起见,我想在应用程序实际被杀之后才开始使用InitialActivity.

小智 0

首先,我建议您不要将其存储在应用程序中,而是可以通过 Intent 将数据传递到您的活动。这样,当 Activity 恢复时,保存的 Intent 将恢复其数据。

现在对您的实际问题提出建议:

  1. 当您的 Activity 恢复时,您将检查 Application 对象中的数据是否为空
  2. 如果是的话,你应该这样称呼:

    Intent newIntent = new Intent(FarAwayActivity.this, InitialActivity.class);
    newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(newIntent);
    
    Run Code Online (Sandbox Code Playgroud)

现在它应该清除堆栈直到找到InitialActivity。