目前我对 Android 的生命周期管理有点困惑。Activity 回到前台后,至少有 4 种可能恢复保留的数据:
Android 处理:如果内存足够,Android 会在 Activity 重启后存储和恢复重要数据(选中的单选按钮、EditText 的文本、-...等),用户的状态与 Activity 进入之前的状态相同背景。
onPause, onResume:覆盖 onPause 并将重要数据保存到数据库或文本文件中,并在下次执行 onResume 时恢复。
onSavedInstance(Bundle), onRestoreInstance(Bundle):我可以将数据作为键值对保存到包中,并在执行 onRestoreInstance 后恢复它们。
onRetainNonConfigurationInstance()、getLastNonConfigurationInstance():我在一个大对象中处理所有存储问题,并在执行 onCreate 时读取 getLastNonConfigurationInstance()。
尽管哪种方法最好是令人困惑的,但我想它依赖于开发经验来知道何时使用哪种可能性。如果你有一些很好的例子,我会很高兴,但这不是我的问题。我想知道当我有不同的活动并且一个活动在后台暂停时会被Android杀死时如何处理所有这些:
就我而言,我有一个 MainActivity 和一个 MessageActivity。MessageActivity 由一个 ViewSwitcher 组成,该 ViewSwitcher 由两个状态组成。状态一是单选按钮选择列表。状态二是带有两个按钮(发送和中止)的 EditText。当我对每个状态进行猴子测试时,点击 Android 主页按钮,然后重新启动应用程序,当我将处理留给 Android 时,具有正确状态和旧数据的正确 Activity 会进入前台。所以这行得通。
但是当Android在后台销毁MessageActivity时会发生什么:如果我使用Android方式,数据会丢失,我猜MainActivity(而不是MessageActivity->state(1或2))将在我重新启动应用程序后启动(是对吗?)。因此,当我想保留 MessageActivity 的数据时,我必须使用其他三种可能性之一。
当应用程序入口点(因此 MainActivity)与最后一个活动 Activity 不同时,如何巧妙地做到这一点。问题是我必须以 ViewSwitcher 的特殊状态恢复一个特殊的 Activity。我可以在 onStart() 或 onResume() 方法中使用 startActivity(Intent) 从 MainActivity 启动 MessageActivity (因为 MainActivity 可能是入口点),但随后我在生命周期管理中遇到了很多逻辑问题。由于这个事实,我认为这不是正确的方法。
但是,这样做的正确和最佳方法是什么?