【问题标题】:How to store fragment data when switching from one fragment to another in android?在android中从一个片段切换到另一个片段时如何存储片段数据?
【发布时间】:2015-10-28 16:18:01
【问题描述】:

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

【问题讨论】:

  • 创建一个静态类。类应包含所有从服务器接收到的 JSON 成员变量。将所有值存储在这些静态成员变量中。
  • 你是如何切换片段的? ViewPager 还是什么?
  • 你可以在它们之间传递一个包。

标签: android json android-fragments android-studio


【解决方案1】:

您可以将 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();
}

【讨论】:

    【解决方案2】:

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

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

    |      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 |
    

    详情:

    • 应用完成 = 用户关闭应用
    • 应用重启 = 系统关闭应用(内存不足)
    • 差效率=需要做很多工作:
      • 保存: json => str => 磁盘
      • 加载: 磁盘 => str => json
    • Ok 效率 = 更少的工作(没有字符串解析):
      • 保存: json => 数据库
      • 加载: 数据库 => json
    • 良好效率 = 对象引用保留在内存中,因此无需任何工作。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-20
      • 2015-01-14
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      相关资源
      最近更新 更多