Android結(jié)束Activity完美退出程序
記得當時自己寫的第一個比較完整的項目的時候就遇上了這個問題,由于對Activity的生命周期了解不夠,又使用了TabActivity使得層次關(guān)系 比較復(fù)雜,在程序中添加的“退出”菜單項經(jīng)常無法完全退出,之后網(wǎng)上各種搜索,各種方法也試過了,什么System.exit(0)啊,結(jié)束進程之類的 啊,都依然無效果。
后面才發(fā)現(xiàn)的這個方法。思路也很簡單,回想自己當初為了解決這個問題時的苦苦尋覓,遂決定將其共享,供遇到此問題人士作為參考。
啰嗦夠了,上思路:添加一個全局變量作為程序退出的標記(boolean類型),當需要退出程序時置為true,程序中每個Activity的onStart方法中對該變量進行判斷,為true就結(jié)束自己。
看代碼吧:
使用Application來保存一個全局變量isProgramExit。(對Application使用不熟悉的話查看相關(guān)資料)
- public class MyApplication extends Application {
- // 程序退出標記
- private static boolean isProgramExit = false;
- public void setExit(boolean exit) {
- isProgramExit = exit;
- }
- public boolean isExit() {
- return isProgramExit;
- }
- }
在你退出時需要結(jié)束的每個Activity的 onStart方法加上以下代碼:
- protected void onStart() {
- super.onStart();
- MyApplication mApp = (MyApplication)getApplication();
- if (mApp.isExit()) {
- finish();
- }
- }
比如,程序中有三個Activity,A —— B —— C;現(xiàn)在在C中有個按鈕,點擊退出整個程序。按照上面說的,在A和B的onStart方法中加入判斷代碼(C中可以不加),C中點擊按鈕時執(zhí)行:
- MyApplication mApp = (MyApplication)getApplication();
- mApp.setExit(true);
- finish();
這樣C結(jié)束了自己,按照流程會回到B,然后B中會進行判斷,因為退出條件滿足,結(jié)束自己;再回到A,同樣也結(jié)束……
可以看到,這種方法并不高明,甚至有些復(fù)雜,因為要在每個Activity的onStart中都加上判斷。但不可否認的是這種方法卻是絕對有效的,不管你的程序中Activity如何跳轉(zhuǎn)來跳轉(zhuǎn)去,只要一聲令下,通通結(jié)束,屢試不爽。
所以,有遇到程序退出問題的朋友可以作為參考。