我有 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/