使用片段以这种方式保留状态是否有任何不利之处?

时间:2016-03-31 12:49:11

标签: android android-fragments

我最近开发了一种新模式,用于通过保留的片段存储片段状态。而不是在onSaveInstanceState中保存内容:

public class MyActivityOrFragment {
  public void onSaveInstanceState(Bundle bundle) {
    bundle.putInt("example", 123);
  }

  // plus restore in onCreate
}

我保留了一个像这样的状态片段:

public class MyActivityOrFragment {
  public static class State extends Fragment {
    int example = 123;
    public void onCreate(...) {
          ...
          setRetainInstance(true);
    }
  }
  State state;

  public void onCreate(Bundle ssi) {
    if (ssi == null) {
      state = new State();
      getFragmentManager().beginTransaction().add(state, "state").commit();
    } else {
      state = (State) getFragmentManager().findByTag("state");
    }
  }
}

由于我可以将其保存在状态片段中并且知道它将自动保留,因此有很多状态可以保持这个减少太多样板。但是,使用保留的片段而不是像通常建议的那样保存到包中是否有任何缺点?这真是太好了吗?

2 个答案:

答案 0 :(得分:-1)

根据Android文档。

使用setRetainInstance(),您可以在应用程序运行时保留片段。

  

控制是否在Activity中保留片段实例   重新创建(例如从配置更改)。

http://developer.android.com/reference/android/app/Fragment.html

但是,如果您的活动被销毁,它将不会保留它。这就是onSaveInstanceState和onRestoreInstanceState的用途。

  

当您的活动开始停止时,系统会调用   onSaveInstanceState()因此您的活动可以保存状态信息   一组键值对。

     

当您的活动在之前被销毁之后重新创建时,您   可以从系统通过的Bundle恢复已保存的状态   你的活动。 onCreate()和onRestoreInstanceState()   回调方法接收包含实例的相同Bundle   国家信息。

http://developer.android.com/training/basics/activity-lifecycle/recreating.html

答案 1 :(得分:-1)

使用片段然后onSaveInstanceState()是不好的方法,因为片段的方法消耗更多的内存。