这些方法在哪里适合活动生命周期?
OnSaveInstanceState 在您的活动即将被终止或重新启动之前调用(例如内存压力或配置更改的 b/c)。请注意,这与 onPause 不同,后者在您的活动失去焦点时调用(例如,您转换到另一个活动)。
通常 onSaveInstanceState 将在 onPause 之后但在 onStop 之前调用,但并非总是如此。例如,如果您按回,则活动被破坏(如调用 finish())并且不需要保存状态,因此不会调用 onSaveInstanceState。那么为什么不在 onPause 中保存状态呢?仅仅因为活动失去焦点并不意味着它已被杀死。它仍在记忆中。基本上,您不想在每次暂停时保存状态,而是在您暂停并即将变得不可见时(即从前台转到后台)。
那么在 onPause 中你应该做什么呢?理想情况下,您应该释放消耗电池的资源,例如网络连接、关闭地理或加速度计、暂停视频(所有这些都取决于您的应用程序)。并在 onResume 中恢复这些资源,正如您可能已经猜到的,当您的活动获得焦点时会调用它。
onCreate 和 onRestoreInstanceState 是互斥的吗?
onRestoreInstanceState 是多余的,因为您可以在 onCreate 中轻松恢复状态。
话虽如此,官方文档对 onRestoreInstanceState 的说法如下:
大多数实现将简单地使用 onCreate(Bundle) 来恢复它们的状态,但有时在完成所有初始化之后在这里这样做会很方便,或者 允许子类决定是否使用您的默认实现。
因此,为了获得最佳实践,请在 onCreate 中布置视图层次结构并在 onRestoreInstanceState 中恢复之前的状态。如果你这样做,任何继承你的 Activity 的人都可以选择覆盖你的 onRestoreInstanceState 来增加或替换你的恢复状态逻辑。说onRestoreInstanceState 用作模板方法,这是一个很长的路要走。
Activity 销毁时是否调用 onRestoreInstanceState?这是什么意思?
这在 1 中得到了部分回答。是的,onRestore 在系统即将销毁您的活动时被调用。当系统处于内存压力或用户明确关闭应用程序(例如从导航栏中的最近浏览器中滑动删除)或存在配置更改(例如从陆地空间到纵向)时,系统将销毁您的活动。
为什么 android 是这样设计的(不像桌面应用)?因为在移动系统上,资源管理是电池寿命的一个尖锐问题。因此,您希望在应用程序生命周期中提供挂钩,以便应用程序可以在关闭或失去焦点之间干净地保存和恢复其状态,同时使其对用户完全透明。
onRestoreInstanceState 似乎只能从果冻豆中的仪器调用。这不再与活动生命周期相关吗?
我不明白这个问题。能改一下吗?