gpt4 book ai didi

当屏幕关闭并再次打开时 Android 丢失状态

转载 作者:行者123 更新时间:2023-11-30 01:44:48 24 4
gpt4 key购买 nike

我正在努力解决关于 Activity > ViewPager > Fragments 的问题,这些问题正在被完全破坏并再次重新创建,我正在处理这种情况,比如屏幕 orientation 更改了,我只是从保存的 instance restore 我的 data,但是当我的设备闲置一段时间并且屏幕关闭时 offON 再次,instance 中保存的 data 正在被 destroyed 并且其为 null。
代码示例:

Base Fragment

@Override public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Icepick.saveInstanceState(this, outState);
}

@Override public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Icepick.restoreInstanceState(this, savedInstanceState);
setRetainInstance(true);
}

Activity

    mAdapter = new BrochureContentAdapter(getSupportFragmentManager(), models);
pager.setAdapter(mAdapter);
pager.setCurrentItem(position, true);
pager.setOffscreenPageLimit(models.size());

BaseFragment 在屏幕旋转(重新创建)时通过 IcePick 处理保存和恢复 instance 一切顺利,我唯一的问题是在扩展 BaseFragmentfragment 如果屏幕进入 idle 一段时间然后返回 ON,则正在保存的实例彻底摧毁。

有没有人遇到过类似的问题并找到解决方法?

最佳答案

对我来说真正解决问题的只是移动东西

Icepick.restoreInstanceState(this, savedInstanceState);

onActivityCreated 里面,每次我从屏幕 OFF 时都会调用它,不知何故我的 bundle 数据正在被清除并解决我的 saving/restoring 命令变成如下:

@Override public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Icepick.saveInstanceState(this, outState);
}

@Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (savedInstanceState != null && !savedInstanceState.isEmpty()) {
Icepick.restoreInstanceState(this, savedInstanceState);
}
}

@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}

移动 Icepick.restoreInstanceState(this, savedInstanceState);onActivityCreatedonViewCreatedsetRetainInstanceonActivityCreatedonCreate 解决了这个问题。
我希望它能帮助将来的人。

关于当屏幕关闭并再次打开时 Android 丢失状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33884492/

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