1. 程式人生 > >Android 完美退出 App (Exit)

Android 完美退出 App (Exit)

      最近兩天為了解決Android上面退出程式問題折騰了半死,在google & baidu 上面找了很久、很久出來的完全千篇一律,說的方法有三,但是經過我試驗後全部不行。

      三個方法分別是:

  1. killProcess, 這種方式當你kill後 Activity 會返回到上一個Activity
  2. Android Level 8(包含8)前使用一個API來操作,Level8以後又是另外一種,所以不能通用
  3. 使用 FLAG_ACTIVITY_CLEAR_TOP,從 A 到 B
下面介紹自己的方式: 大家都知道 Android 的 Activity 是存著歷史棧的,比如從 A -> B -> C,C 完成 finish 後回到 B,把所有的Activity 都 finish了,程式就自然退出了。 當然在 finish 的同時也需要是否自己程式的其他資源。所以需要想個辦法把 Activity 給存起來。然後在程式退出的地方呼叫它們的 finish()方法。 使用全域性變數。對了,第一個想到的就是繼承 Application,程式碼入下。
public class AgentApplication extends Application {

private List<Activity> activities = new ArrayList<Activity>();

	public void addActivity(Activity activity) {
		activities.add(activity);
	}

	@Override
	public void onTerminate() {
		super.onTerminate();
		
		for (Activity activity : activities) {
			activity.finish();
		}
		
		onDestroy();
		
		System.exit(0);
	}
}

然後在 Activity  onCreate 的時候來呼叫  addActivity (),有人可能想到這個Application需要在所有的 Activity  onCreate的時候都使用,需要做一個單例例項。其實根本不需要。在 Activity 中使用  this.getApplication() 就可以了。 最後在你需要推出程式的地方呼叫 application.onTerminate() 就可以了。記住:super.onTerminate() 必須呼叫,程式碼中的 onDestroy()是我自己的釋放其他資源的方法,不是系統的。 執行以上程式碼後,在LogCat 中會出現一行提示: Process  包名 (pid  xxxxx)  has died.  證明你的程式退出了。現在你可以測試了。 希望對大家有用。同時感謝同事胡楠幫我處理其他問題,使得我才有時間來 寫部落格,謝謝。 大笑