我的应用有一个 Activity,它有一个 ViewPager。 ViewPager 中有几个 fragment 。
有一个错误。当我点击“主页”隐藏我的应用程序,并启动许多其他应用程序时,这些应用程序是内存 killer ,而不是我点击图标回调我的应用程序, fragment 乱序。
我调试了很多天,最后发现,当应用程序从低内存中恢复时,它会从头开始重新启动 Activity ,我的意思是它从 Activity 的静态初始代码开始到 onCreate()。但是,系统也自动为我创建了 fragment ,这不是我的代码,也没有初始化。
我知道系统想要做什么。它想帮助应用程序恢复内存不足之前的状态。当内存不足时,系统会杀死我的 fragment 。
我有两个问题:
(1) 当系统为我重新创建 fragment 时,我如何接收?我的意思是,我有很多指向旧 fragment 的数据结构,我怎样才能将这个指针更改为新 fragment ?我找到了一种方法,当自动重新创建的 fragment 到达 onAttach() 时,用这个 fragment 的地址替换 Activity 中的旧指针值。就像这样:Viewpager loose fragment connection on low memory kill .如果这是官方方式和最佳方式?
(2) 在某些情况下我真的不需要恢复低内存之前的状态。我想重新启动应用程序以获得清晰的应用程序。那么,是否有一个选项可以防止系统为我重新创建 fragment 或其他状态?
最佳答案
(1) 您需要在覆盖onSaveInstanceState
中保存所有您想要保留的数据。然后在 onCreate
方法中将此状态返回给您。
(2) 如果您的应用程序只有一个 Activity ,您可以从 onStop
覆盖调用 finish
。然后,每次将应用发送到后台时,您的应用都会重新启动。
关于android - 当应用程序从低内存中返回时系统重新创建 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22062896/