gpt4 book ai didi

android - FragmentActivity onSaveInstanceState 没有被调用

转载 作者:IT王子 更新时间:2023-10-28 23:33:15 30 4
gpt4 key购买 nike

我已经看到一些类似的问题,关于 onSaveInstanceState 没有被 Fragment 调用,但在我的情况下 Fragment 工作正常,它是有问题的主要 FragmentActivity

相关代码看起来相当简单:

public class MyFActivity extends FragmentActivity implements ActionBar.TabListener { 
String[] allValues; // data to save

@Override
protected void onSaveInstanceState (Bundle outState) {
Log.d("putting it!", allValues.toString());
outState.putStringArray("allValues", allValues);
super.onSaveInstanceState(outState);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
allValues = savedInstanceState.getStringArray("allValues");
Log.d("getting it!", allValues.toString());
}
}
}

暂停 Activity 时(使用后退按钮),永远不会调用 onSaveInstanceState,因此,savedInstanceState 在恢复应用时的 onCreate 方法。我尝试添加这样的 block :

@Override
public void onPause() {
super.onPause();
onSaveInstanceState(new Bundle());
}

https://stackoverflow.com/a/14195202/362657 中建议的但是当 onSaveInstanceState 被调用时,savedInstanceStateonCreate 方法中仍然是 null。我错过了什么?

最佳答案

这里的问题是您误解了 onSaveInstanceState 的工作原理。它旨在保存 Activity/Fragment 的状态,以防操作系统因内存原因或配置更改而需要销毁它。当 Activity/Fragment 返回/重新启动时,此状态会在 onCreate 中传回。

Fragment 中,它们的所有生命周期回调都直接绑定(bind)到它们的父 Activity。因此,当父 Activity 调用了 onSaveInstanceState 时,onSaveInstanceState 会在 Fragment 上被调用。

When pausing the activity (using the back button), the onSaveInstanceState is never called, and consequently, savedInstanceState is always null within the onCreate method upon resuming the app.

当按下返回时,用户正在销毁 Activity,因此它的子 Fragments,因此没有理由调用 onSaveInstanceState ,因为实例正在被销毁。当你重新打开Activity时,它是一个全新的实例,没有保存状态,所以onCreate中传入的Bundlenull。这完全符合设计。但是,尝试旋转设备或点击主页按钮,然后您将看到 Activity 及其子 Fragment 已调用 onSaveInstanceState,并通过返回时返回onCreate

您添加的 hack,直接在 onPause 内调用 onSaveInstanceState(new Bundle()); 是一种非常糟糕的做法,因为您应该切勿直接调用生命周期回调。这样做会使您的应用程序进入非法状态。

如果您真正想要的是让您的数据在您的应用程序实例之外持续存在,我建议您考虑使用 SharedPreferencesdatabases获取更高级的数据。然后,您可以将持久数据保存在 onPause() 中或在其更改时保存。

希望这会有所帮助。

关于android - FragmentActivity onSaveInstanceState 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15935322/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com