当应用程序从低内存返回时,系统重新创建片段

时间:2014-02-27 08:26:44

标签: android memory android-viewpager fragment

我的应用有一个具有ViewPager的活动。 ViewPager中有几个片段。

有一个错误。当我点击“主页”来隐藏我的应用程序,并启动许多其他应用程序,这些都是内存杀手,而不是我点击图标来回调我的应用程序,这些碎片无序。

我调试了很多天,终于发现,当应用程序从低内存返回时,它从头开始重新启动活动,我的意思是它从activity的静态初始代码开始到onCreate()。但是,系统也会自动为我创建片段,这不是我的代码,也不是初始化。

我知道系统想要做什么。它希望帮助应用程序在遭受低内存之前恢复状态。当内存不足时,系统会杀死我的碎片。

我有两个问题:

(1)当系统为我重新创建片段时,我该如何接收它?我的意思是,我有很多指向旧片段的数据结构,如何更改指向新片段的指针?我找到一种方法,当自动重新创建的片段到达onAttach()时,将活动中的旧指针值替换为该片段的地址。就像这样:Viewpager loose fragment connection on low memory kill。如果这是官方的方式和最好的方式?

(2)在某些情况下,我真的不需要在低内存之前恢复状态。我想重启应用程序有一个清晰的应用程序。那么,如果有一个选项来阻止系统为我重新创建片段或其他状态?

1 个答案:

答案 0 :(得分:1)

(1)您需要在覆盖onSaveInstanceState中保存要保留的所有数据。然后,使用onCreate方法将此状态返回给您。

(2)如果您的应用只有一项活动,则可以从finish覆盖拨打onStop。然后,每次将应用程序发送到后台时,您的应用都会重新启动。