有一个与操作系统相关的错误杀死/恢复活动(或应用程序?)。
经过一些调试发现 if setdon't keep activities
和 set Background process limit
tono background process
会导致不同的行为。
看到这篇文章,但它没有回答这里的问题。
这是观察到的:
在应用程序中,它将启动 dagger 组件并维护一些应用程序范围的单例对象,在活动 A(默认启动活动)中,它将通过用户的操作启动活动 B,在 B 中创建并托管一个片段。将有一些数据存储在应用程序范围的单例对象中以与片段一起使用。
如果只有don't keep activities
设置,当最小化应用程序时调用 onDestroy() 活动,当重新打开应用程序时,它会恢复最后一个活动活动(比如用户打开活动 B,B 将被重新创建使用 savedInstanceState 恢复的片段)。在这种情况下,由 dagger 管理的应用程序范围单例对象仍然存在,因此状态完全恢复到最小化应用程序之前的状态。
但是,如果两者都don't keep activities
设置Background process limit
为no background process
,则在最小化应用程序时,不会调用 Activity 的 onDestroy()(仅调用 onStop())。
此时的行为变化是如果重新打开应用程序,它将从应用程序 onCreate() 开始,并重新创建匕首的组件。所以最小化应用程序之前的状态不会被重新存储。
但是操作系统似乎仍然记得最后一个活动是 B 和 B 的
onCreate(savedInstanceState: Bundle?)
使用 savedInstanceState 调用,在最小化应用程序时保存数据,B 的片段也是如此。
而且它是一团糟,它有来自 savedInstanceState 的数据,但应用程序范围的单例对象是新的,没有数据与来自 savedInstanceState 的数据一起工作。
任何人都知道在这种情况下 saveInstance 保存在哪里,为什么虽然应用程序似乎被重新创建但最后一个活动(不是启动活动)仍然被重新存储?