首先浇冰,onSaveInstanceState()會(huì)被調(diào)用的情況如下:
1.按下HOME鍵時(shí)
2.按下電源按鍵(關(guān)閉屏幕顯示)時(shí)
3.從activity 中啟動(dòng)一個(gè)新的activity時(shí)
4.屏幕方向切換時(shí)
總而言之,onSaveInstanceState的調(diào)用遵循一個(gè)重要原則刮吧,即當(dāng)系統(tǒng)“未經(jīng)你許可”時(shí)銷毀了你的activity湖饱,則onSaveInstanceState會(huì)被系統(tǒng)調(diào)用,這是系統(tǒng)的責(zé)任杀捻。
方法:記錄當(dāng)前要保存的狀態(tài),
重寫onSaveInstanceState方法蚓庭,將要保存的數(shù)據(jù)傳入bundle中進(jìn)行保存
致讥,比如我們需要記錄當(dāng)前頁(yè)播放的的播放進(jìn)度,再次進(jìn)入繼續(xù)上次播放器赞。
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("currentposition", videoView.getCurrentPosition());
super.onSaveInstanceState(outState);
}
恢復(fù)保存的狀態(tài):
在oncreate方法中,獲取bundle中的信息垢袱。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
savedInstanceState.getInt("currentposition");
}
怎么保存fragment的狀態(tài)呢?
fragment自己維持了一個(gè)Bundle對(duì)象港柜,即通過(guò)setArgument()存儲(chǔ)请契,getArgument()獲取咳榜。
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getArguments().getInt("key");
}
@Override
public void onDestroyView() {
super.onDestroyView();
getArguments().putInt("key",1);
}