android用戶單例的數(shù)據(jù)持久化類似問(wèn)題

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

}

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容