Android activity 系统杀死后重新创建

Android activity recreation after system kills it

我的应用在特定情况下遇到问题。 活动流程如下:

  1. SplashScreenActivity(这是我的默认启动器activity,它对外部应用程序主题进行一些重要的预加载
  2. 加载我的主题后,它会自动转到下一个 LoginActivity

发生的问题是当我将我的应用程序留在 LoginActivity 中并通过点击主页按钮将应用程序置于后台时。在后台我会启动尽可能多的其他应用程序,这样我就可以获得处于临界状态的 phone 内存,并以这种方式强制 Android 系统杀死我的 activity 以便其他应用程序使用此内存。

发生这种情况时,我尝试返回到仍在打开的应用程序列表中的我的应用程序,当我这样做时,我读到 Android 系统重新创建了最后一个 activity它在发生此内存释放时打开,那是我的应用程序崩溃的时刻,因为它没有存储在内存中的一些数据。

我的问题是,有什么方法可以让我告诉或配置应用程序,当这种情况恰好不会重新创建最后 activity 而是启动我的默认启动器 activity(在这种情况下SplashScreenActivity )通常会预加载稍后在 LoginActivity 中使用的所有必要数据。

注意我不需要我的应用每次都启动 SplashScreenActivity 将应用程序置于后台然后返回前台。我需要它仅在 Android 系统杀死它时启动此默认值 activity,因为它需要一些内存。

您可以检查所需的资源是否仍然可用。如果不是,您可以使用

返回到第一个 activity
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

这将从堆栈中删除所有活动,您可以从头开始。

为了更容易调试,您还可以在开发人员设置中激活 "Don't keep activities" 选项。当您离开应用程序时,这将始终破坏 activity。

如果您的数据可以使用 onSaveInstanceState 方法存储,我建议您这样做。虽然我理解需要这样做,因为 android 保存 activity 状态的方法在涉及复杂对象时非常有限。