一鍵退出一個app中所有activity
阿新 • • 發佈:2019-01-31
這幾天在Android的開發過程中遇到了這麼樣一個問題,當App中擁有多個Activity時,如A,B,C三個。
在A->B後,若想在B中直接退出APP,呼叫System.exit(0)或者android.os.Process.killProcess(android.os.Process.myPid()) 均不能完全退出App。
研究後,這個和Android UI的棧設計有關。
若想要退出整個APP,必然需要將整個棧中存放的Activity每個殺掉。根據這個思路,就有了這麼兩種解決辦法:
一:
定義一個父類Activity,讓所有自己定義的Activity繼承該父類Activity,在父類Activity中定義一個廣播接收器。當需要關閉所有Activity時,直接傳送廣播。父類Activity接收到後將所有Activity全部關閉。
二:
利用一個外部類application,把所有開啟的activity都放在一個list裡面,當點選退出的時候遍歷list,然後一個一個的結束掉。
經過本人試驗,第二種方法的可靠性更高。貼上邏輯演算法
public class ExitApplication extends Application { private List<Activity> activityList=new LinkedList<Activity>(); private static ExitApplication instance; private ExitApplication(){} //單例模式獲取唯一的exitapplication public static ExitApplication getInstance(){ if(null==instance){ instance=new ExitApplication(); } return instance; } //新增activity到容器中 public void addActivity(Activity activity){ activityList.add(activity); } //遍歷所有的Activiy並finish public void exit(){ for(Activity activity:activityList){ activity.finish(); } System.exit(0); } }
然後,在每個activity的oncreat方法裡面加上這句ExitApplication.getInstance().addActivity(this);
一鍵退出
ExitApplication.getInstance().exit();
歸根結底,兩種方法都是利用變通的辦法退出APP,UI類的棧是不能直接銷燬的,只能控制入棧出棧