1. 程式人生 > >Application回收重啟程式

Application回收重啟程式

背景:

  Android系統會自動回收退到後臺的應用,我們可以執行一個後臺Service,讓我們的應用被回收的優先順序變低,當時終歸還是無法保證我們的程序被系統回收。

當系統被回收之後,我們快取的一些資料也會被回收,當再次進入Activity的時候很可能會出現NULL指標異常。我們可以將資料持久化到本地,然後恢復Activity的時候從本地獲取我們需要的資料。

  有一些我們繼承的第三方的sdk,當程序被回收之後,需要重新進行初始化,並不是簡單的恢復資料就能解決的,這個時候我們可以考慮在程序被回收之後重新跳轉到登陸介面進行重新登陸。

解決方案

當程序被回收再次進入到應用的時候,Activity的onCreate方法傳入的savedInstanceState != null,平時進入的時候=null,我們可以根據這個進行判斷是否結束該Activity,直到我們不需要結束的Activity。我這種方案,當你的應用通過savedInstanceState儲存Activity的資料進行恢復的時候就不適用了。這個時候你可以根據Application中快取的資料做為null判斷 。

1、定義一個成員變數allowAutoFinish = true;

2、在BaseActivity中加入

@Override
protected void onCreate(Bundle savedInstanceState) {
//應用異常重啟該Activity
if(savedInstanceState != null){
if(allowAutoFinish){
finish();
}
    }

3、在不需要退出的Activity中加入

@Override
protected void onCreate(Bundle savedInstanceState) {
//當應用異常退出重啟Activity
時,不結束LoginActivity allowAutoFinish = false; super.onCreate(savedInstanceState); }

這樣,當應用退出到後臺,Application被回收之後,再次進入,就會直接回到登陸介面。
可以用DDMS中的kill process模擬程序被回收。也可以瘋狂啟動手機的應用,讓應用背系統回收。