大家都知道 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. 證明你的程式退出了。