gpt4 book ai didi

android - 手动保存和恢复 Activity 的实例状态

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:05 25 4
gpt4 key购买 nike

我的应用程序中有一个下载 Activity ,用户可以在其中下载一些内容。该 Activity 从主 Activity 调用,并检索可通过网络下载的文件列表。

为了避免在重新创建下载 Activity 时再次获取整个列表,例如由于旋转,我覆盖了 onSaveInstanceState() 以将列表存储在 Bundle 中并评估传递给 onCreate() 的 Bundle 方法。这很适合轮换。

但是,如果用户点击返回并稍后返回到下载 Activity ,我希望能够实现相同的行为。在这种情况下,Android 不会调用 onSaveInstanceState(),因此不会保存任何内容。

我的想法是覆盖 onBackPressed() 并包括对 onSaveInstanceState() 的调用。

  • 这行得通吗?
  • 我可以只执行 onSaveInstanceState(new Bundle()),还是必须以某种方式初始化新的包?
  • Android 会存储 bundle 并将其传递给 onCreate() 以用于它创建的下一个 Activity 实例,还是我必须自己存储 Bundle 并将其传递给新实例(如果是,如何传递)?

更新:

简单添加

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

给我以下异常:

java.lang.IllegalStateException: 无法在 onSaveInstanceState 之后执行此操作

用于调用 onBackPressed()。 (交换两条线没有任何作用,大概是因为没有什么可以保存了。)

最佳答案

Will this work at all?

没有。

Will Android store the bundle and pass it to onCreate() for the next instance of the Activity it creates

没有。

do I have to take care myself of storing the Bundle and passing it to the new instance (if so, how)?

没有。

将您的模型数据存储在文件或数据库中,使用进程级缓存(例如,自定义单例)来最小化磁盘 I/O。将数据从可用的缓存中加载出来,或者在需要时从磁盘重新加载。

关于android - 手动保存和恢复 Activity 的实例状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37757767/

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