android - 在android中从一个 fragment 切换到另一个 fragment 时如何存储 fragment 数据?

标签 android json android-fragments android-studio

我有 2 个 fragment 。在一个 fragment 中,我正在访问服务器 JSON 数据。 在切换 fragment 时,数据会被一次又一次地访问。 我如何在应用程序打开之前临时存储这些数据,这样数据就不会一次又一次地从服务器访问。

最佳答案

有许多选项可以权衡效率(保存/加载数据的速度)和持久性(数据将在内存中保留多长时间)。

以下所有解决方案都会保留配置更改(例如方向更改),这通常是良好用户体验所需的最低级别的持久性。

|      Method        |  Efficiency  |            Persistence                 |
+--------------------+--------------+----------------------------------------+
| SharedPreferences  |     Bad      | until app uninstall                    |
| SavedInstanceState |     Bad      | until app finished                     |
| Bundle/Extra       |     Bad      | until app finished                     |
| Database           |     Ok       | until app uninstall                    |
| Application        |     Good     | until app restart                      |
| Singleton          |     Good     | until app restart                      |
| EventBus (Sticky)  |     Good     | until app restart                      |
| Retain Fragment    |     Good     | until Activity finished or app restart |

详情:

  • 应用完成 = 用户关闭应用
  • app restart = system closed app (low memory)
  • 效率 = 需要做很多工作:
    • 保存: json => str => 磁盘
    • 加载: disk => str => json
  • Ok 效率 = 更少的工作(无字符串解析):
    • 保存 json => 数据库
    • 加载:数据库=> json
  • 效率 = 对象引用保留在内存中,因此无需任何工作。

但是请注意,所有“良好”效率方法的持续时间都很短,因为它们都受到应用重启的限制,这发生在内存不足的情况下。因为内存不足的情况随时可能发生,所以我通常将这些方法与savedInstanceState结合使用,可以在内存不足退出前保存数据。

另请注意,存储数据的时间超过您的需要也不好,因此请选择与您的用例相匹配的持久性。

关于android - 在android中从一个 fragment 切换到另一个 fragment 时如何存储 fragment 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31840132/

相关文章:

javascript - 如果我有超过 1 个 JSON 组,则主干错误

java - Jackson 的多态反序列化问题

java - 如何在 PreferenceFragment 中即时更新日夜模式?

android - fragment 错误

android - 带有 FragmentContainerView 的空 NavHostFragment/NavController

java - 如何检查一个函数是否已经在java中被调用?

android - 检查 Android 用户的 "when device is locked"通知设置

android - doOnSubscribe 在 IO 线程上调用

android - 获取ImageView值

php - 从 JSON 父数组获取随机数组的名称