我们已经知道,如果我们想要保存活动的状态,我们通常会使用onSaveInstanceState(Bundle outState)
,但此方法仅适用于基元和parcelable。
我认为onRetainCustomNonConfigurationInstance
是一个可以保存任意对象(例如绑定服务连接)的助手。它在配置更改(例如屏幕旋转)期间完美运行,我可以恢复我保存的对象。但是,在我打开"不要保持活动"在模拟器上设置(根据文档:启用此选项后,Android操作系统将在停止时立即销毁活动。它旨在帮助开发人员调试他们的应用程序。例如,它可以模拟Android将杀死的情况由于内存压力导致的后台活动。),当我导航到另一个活动时(在操作系统销毁第一个活动的同一时刻),onRetainCustomNonConfigurationInstance
永远不会被调用。因此,我无法通过调用getLastCustomNonConfigurationInstance
来恢复以前的对象。但与此同时,onSaveInstanceState(Bundle outState)
工作正常。
现在我有三个问题:
在配置更改(屏幕旋转)和紧张内存导致活动关闭之间的活动保存和恢复的区别是什么(当我们导航回来时它会恢复)?在这两种情况下,操作系统关闭了活动,那么为什么它们的表现不同?
onRetainCustomNonConfigurationInstance
仅用于在配置更改期间保存实例,但没有其他内容?
"不进行活动"设置真的模拟就像OS杀死活动一样?或者它会做一些特殊的事情导致差异?