利用onSaveInstanceState()方法儲存Activity、Fragment狀態
首先,onSaveInstanceState()會被呼叫的情況如下:
1.按下HOME鍵時
2.按下電源按鍵(關閉螢幕顯示)時
3.從activity 中啟動一個新的activity時
4.螢幕方向切換時
總而言之,onSaveInstanceState的呼叫遵循一個重要原則,即當系統“未經你許可”時銷燬了你的activity,則onSaveInstanceState會被系統呼叫,這是系統的責任。
方法:記錄當前要儲存的狀態,
重寫onSaveInstanceState方法,將要儲存的資料傳入bundle中進行儲存
,比如我們需要記錄當前頁播放的的播放進度,再次進入繼續上次播放。
@Override protected void onSaveInstanceState(Bundle outState) { outState.putInt("currentposition", videoView.getCurrentPosition()); super.onSaveInstanceState(outState); }
恢復儲存的狀態:
在oncreate方法中,獲取bundle中的資訊。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); savedInstanceState.getInt("currentposition"); }
怎麼儲存fragment的狀態呢?
fragment自己維持了一個Bundle物件,即通過setArgument()儲存,getArgument()獲取。
@Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getArguments().getInt("key"); } @Override public void onDestroyView() { super.onDestroyView(); getArguments().putInt("key",1); }