最近在写一个包含两个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; } }