2016-03-31 15 views
0

我最近開發了一種新的模式,通過保留的片段來存儲片段狀態。用這種方式保留狀態是否有缺點?

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"); 
    } 
    } 
} 

與很多國家保持這種減少這麼多的樣板,因爲我只是不停地在相反的onSaveInstanceState保存的東西這樣的狀態片段,並知道它會自動保留。但是,使用保留的片段而不是像通常推薦的那樣保存到包中有什麼缺點?這太好了,難道是真的嗎?

+0

看看這個:https://github.com/frankiesardo/icepick – Teodor

回答

0

根據Android的文檔。

使用setRetainInstance(),您可以在應用程序運行時保留片段。

控制是否在整個活動 重新創建(如從配置更改)保留片段實例。

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

0

它是壞的方式使用片段的onSaveInstanceState然後(),與becouse片段法消耗更多的存儲器。