Android開發(fā)中經(jīng)常會(huì)遇到這種情況:activity B啟用后位于activity A的前端,在某個(gè)時(shí)刻再返回activity A時(shí),該界面某些Intent傳參已經(jīng)被系統(tǒng)回收,從而可能導(dǎo)致參數(shù)調(diào)用失敗,甚至app奔潰。
此時(shí)可以通過(guò)onSaveInstanceState()保存其用戶界面狀態(tài)或者Intent參數(shù),使得將來(lái)用戶返回到activity A時(shí)能通過(guò)onCreate(Bundle)或者onRestoreInstanceState(Bundle)恢復(fù)界面的狀態(tài)或者Intent參數(shù)。
具體實(shí)例如下
//將bundle參數(shù)保存在outState中
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("house_detail", houseDetailModel);
}
//onCreate時(shí)如果savedInstanceState中有值則取值
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
BarUtils.setDark(this);
//該頁(yè)面閑置時(shí)間較久,houseDetailModel對(duì)象被回收,現(xiàn)將其保存至savedInstanceState
if (savedInstanceState != null) {
houseDetailModel = (HouseDetailModel) savedInstanceState.getSerializable("house_detail");
} else {
houseDetailModel = (HouseDetailModel) getIntent().getSerializableExtra("house_detail");
}
super.onCreate(savedInstanceState);
}
測(cè)試:
1.將界面切至測(cè)試界面;
2.將app切換至后臺(tái)模式;
3.AndroidStudio Terminal輸入命令:adb shell am kill app包名
4.打開app