我有2个片段。在一个片段中我正在访问服务器JSON数据。 在切换片段时,一次又一次地访问数据。 如何临时存储此数据,直到应用程序处于打开状态,以便不会再次从服务器访问数据。
答案 0 :(得分:3)
有很多选项可以通过持久性(数据在内存中保留多长时间)权衡效率(保存/加载数据的速度有多快)。
以下所有解决方案都会保留配置更改(例如,方向更改),这通常是良好用户体验所需的最低持久性级别。
| 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 |
<强>详情:强>
但请注意,所有“好”效率方法都具有短暂持久性,因为它们都受到应用程序重启的限制,这种情况发生在内存不足的情况下。由于低内存情况可能随时发生,我通常会将这些方法与 savedInstanceState 结合使用,这可以在内存不足的情况下在退出之前保存数据。
另请注意,存储数据的时间超过了您的需求也不是很好,因此请选择与您的用例匹配的持久性。
答案 1 :(得分:0)
您可以将json字符串存储在共享偏好中以用于临时目的,这样您就不必一次又一次地从服务器访问数据。
SharedPreferences shared;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
shared = getSharedPreferences("prefs", Context.MODE_PRIVATE);
shared.edit().putString("JSON",jsonString).commit();
}