在android開(kāi)發(fā)中,我們一般會(huì)將用戶的對(duì)象做成一個(gè)單例模式,但是有時(shí)在內(nèi)存不夠的情況下,會(huì)釋放掉這個(gè)對(duì)象,或者釋放了Activity,然后再需要用到這個(gè)用戶對(duì)象里的屬性的時(shí)候,程序就會(huì)報(bào)空指針,有時(shí)候程序就會(huì)崩的莫名其妙。
這個(gè)時(shí)候,我們需要做一下數(shù)據(jù)的持久化,在BaseActivity和BaseFragment中重寫onSaveInstanceState和onRestoreInstanceState
這兩個(gè)方法,在這里前一個(gè)方法中扔入要保存的數(shù)據(jù),在后一個(gè)方法中取出。這兩個(gè)方法并不是生命周期,有時(shí)會(huì)觸發(fā)。
當(dāng)Activity變的容易被回收的情況,比如按了home鍵,退出程序,內(nèi)存吃緊的話再進(jìn)來(lái)的時(shí)候數(shù)據(jù)很可能已經(jīng)被回收,造成喜聞樂(lè)見(jiàn)的空指針。關(guān)閉了屏幕,橫豎屏切換,啟動(dòng)了其他Activity。
附代碼:
(歡迎補(bǔ)充和指責(zé))
@Override
protected voidonSaveInstanceState(Bundle outState) {
outState.putSerializable("static_user",UserToken.getInstance().getUserModel());
super.onSaveInstanceState(outState);
}
@Override
protected voidonRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if(savedInstanceState !=null){
if(UserToken.getInstance().getUserModel() ==null) {
UserToken.getInstance().setUserModel((UserModel) savedInstanceState.getSerializable("static_user"));
}
}
}