大家肯定會遇到過app退到后臺,同時開啟很多其他的應(yīng)用,這時可能會造成我們的app因內(nèi)存不足而導(dǎo)致進程被殺死,這時我們在從后臺返回我們的app時,就會出現(xiàn)問題,特別是用到Application里面存儲的變量時,這時會出現(xiàn)空指針的現(xiàn)象,這時我們就要想辦法來解決這個問題。
第一種是直接在登錄的時候直接把網(wǎng)絡(luò)獲取的數(shù)據(jù)存進數(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中實現(xiàn)這個protecApp()
@Overrideprotected voidprotectApp() {? ? startActivity(newIntent(this, SplashActivity.class));? ? finish();}
(4)最后我們要在歡迎頁的activity中把flag設(shè)置成-1以外的數(shù);
MyApplication.flag=0;
這樣我們的app被后臺殺死時,都會重走歡迎頁,重新獲取數(shù)據(jù)