设备闲置时,片段状态丢失

时间:2014-04-07 13:21:23

标签: android android-fragments

片段丢失状态,如果闲置20分钟则显示空UI。我正在使用FragmentStatePagerAdapter,我尝试调用FragmentActivity的notifyDataSetChanged中的onStart()

请帮助我如何保存片段的对象和状态,并在重新加载应用时重复使用它。

4 个答案:

答案 0 :(得分:3)

如果需要,Android可以杀死您的应用,您需要使用onSaveInstanceState来保持您的状态。 (请记住:在onPause中保存重要数据!)

onSaveInstanceState存在于Activity和Fragments中,其使用方式与活动

相同
@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("integer", anInteger);
}

现在在onCreateonCreateViewonActivityCreated,你有这个参数Bundle savedInstanceState,它与保存的捆绑包相对应。 (检查它是否也为空。)


如果没有,也可能Android也会杀死您的FragmentManager,因此您需要覆盖活动中的onSaveInstanceStateonRetoreInstanceState并恢复该片段。

也许这个答案可以帮助你解决我说的最后一件事:Using onSaveInstanceState with fragments in backstack?

答案 1 :(得分:0)

没有你的代码就很难回答。

但我可以说状态通常由savedInstanceState

保存

通常在onActivityCreated中,你有以下内容。在示例中,我给出了保存输入或不输入文本的布尔值。

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    if (savedInstanceState != null) {
        mHasText = savedInstanceState.getBoolean(HAS_TEXT_TAG);
    } else {
       // do something
    }
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putBoolean(HAS_TEXT_TAG, mHasText);
}

这只是一个例子,因为没有你的代码就很难解决问题

答案 2 :(得分:0)

Fragment的生命周期与Activity的生命周期密切相关。这意味着,当你的Activity空闲时;它会杀掉所有包含的Fragments。要存储Fragments,您可以始终按照Fragment API保留它们。这意味着您通常会在后台使用Fragment。但是,防止Activity结束时被破坏或丢失的最佳方法是将相关信息存储在自定义对象中,然后在FragmentActivity时重新创建Fragment恢复。

例如;我可以有一个自定义对象,可以为我的Activity存储相关的UI值,当我的Activity空闲或更改时,我会将这些相关值保存到我创建的自定义对象中。然后,当创建新的Activity时;或者我的旧Fragment已恢复;我会检索这些值并将它们放回到{{1}}的UI中。希望这有助于:)

答案 3 :(得分:0)

如果android需要内存,它会杀死正在运行的应用程序。所以你必须使用

保存对象
public void onSaveInstanceState(Bundle savedState) {}

请注意,savedState必须是可序列化的。

您必须在onResume()中调用notifyDataSetChanged(),因为它确保在活动恢复时调用它。

如需详细解答,请发布您的代码。