最近在寫一個包含兩個Activity和一個Service的App,這個App須要實現完全退出的功能,也就是關閉全部Activity而且結束Service。html
結束Service的方法比較明確,使用stopService就能夠了,關鍵是想要結束全部Activity就須要費點勁了,一開始我嘗試用java
.getSystemService(ACTIVITY_SERVICE).killBackgroundProcesses(getPackageName());
這樣的方法來結束掉全部Activity,可是試了一下,沒有效果。而後Google了一下,看到了這篇文章,文章中的方法仍是比較簡單管用的,而後我又按照本身的須要對這個文章中提供的方法作了一些修改,如今基本上實現了個人App的需求。android
這個方法其實很簡單,就是在一個單例中維護一個Activity的list,在每一個Activity的onCreate中調用這個單例的addActivity(),把當前Activity放到list中,而後想要完全退出App(也就是finsh全部的Activity),只要調用單例中的finshAllActivities()(finshAllActivities()會遍歷這個list,調用list中每一元素的finsh)就能夠了。app
package since1986.opensmspostman; import java.util.Arrays; import java.util.LinkedList; import android.app.Activity; public class ActivityManager { private LinkedList<Activity> activityLinkedList = new LinkedList<Activity>(); private ActivityManager() { } private static ActivityManager instance; public static ActivityManager getInstance(){ if(null == instance){ instance = new ActivityManager(); } return instance; } //向list中添加Activity public ActivityManager addActivity(Activity activity){ activityLinkedList.add(activity); return instance; } //結束特定的Activity(s) public ActivityManager finshActivities(Class<? extends Activity>... activityClasses){ for (Activity activity : activityLinkedList) { if( Arrays.asList(activityClasses).contains( activity.getClass() ) ){ activity.finish(); } } return instance; } //結束全部的Activities public ActivityManager finshAllActivities() { for (Activity activity : activityLinkedList) { activity.finish(); } return instance; } }