大家肯定會遇到過app退到后臺梁只,同時開啟很多其他的應(yīng)用缚柳,這時可能會造成我們的app因內(nèi)存不足而導(dǎo)致進(jìn)程被殺死,這時我們在從后臺返回我們的app時敛纲,就會出現(xiàn)問題喂击,特別是用到Application里面存儲的變量時,這時會出現(xiàn)空指針的現(xiàn)象淤翔,這時我們就要想辦法來解決這個問題。
第一種是直接在登錄的時候直接把網(wǎng)絡(luò)獲取的數(shù)據(jù)存進(jìn)數(shù)據(jù)庫佩谷,用到的時候直接在數(shù)據(jù)庫拿旁壮,這樣呢可以解決問題,但是這時就要寫很多的代碼谐檀。同時還要對數(shù)據(jù)庫操作抡谐,這樣做起來比較麻煩。
第二種是把數(shù)據(jù)存到application中桐猬,這時我們要定義一個變量來判斷app是否被殺死麦撵。
(1)先在application中定義一個靜態(tài)變量
//判斷是否被回收public static intflag= -1;
(2)這時我們只需要定義一個BaseActivity
public classBaseActivityextendsAppCompatActivity {@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);? ? ? ? setContentView(R.layout.activity_base);if(MyApplication.flag== -1) {//flag為-1說明程序被殺掉protectApp();? ? ? ? }? ? }protected voidprotectApp() {? ? ? ? Intent intent =newIntent(this, MainActivity.class);? ? ? ? intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//清空棧里MainActivity之上的所有activtystartActivity(intent);? ? ? ? finish();? ? }
(3)這時我們要把我們項目里面的所有activity(除了歡迎頁的activity)t統(tǒng)一繼承這個BaseActivity,并在MainActivity中實(shí)現(xiàn)這個protecApp()
@Overrideprotected voidprotectApp() {? ? startActivity(newIntent(this, SplashActivity.class));? ? finish();}
(4)最后我們要在歡迎頁的activity中把flag設(shè)置成-1以外的數(shù);
MyApplication.flag=0;
這樣我們的app被后臺殺死時溃肪,都會重走歡迎頁免胃,重新獲取數(shù)據(jù)