最近在写一个包含两个Activity和一个Service的App,这个App需要实现彻底退出的功能,也就是关闭所有Activity并且结束Service。
结束Service的方法比较明确,使用stopService就可以了,关键是想要结束所有Activity就需要费点劲了,一开始我尝试用
.getSystemService(ACTIVITY_SERVICE).killBackgroundProcesses(getPackageName());
这样的方法来结束掉所有Activity,但是试了一下,没有效果。然后Google了一下,看到了这篇文章,文章中的方法还是比较简单管用的,然后我又按照自己的需要对这个文章中提供的方法做了一些修改,现在基本上实现了我的App的需求。
这个方法其实很简单,就是在一个单例中维护一个Activity的list,在每个Activity的onCreate中调用这个单例的addActivity(),把当前Activity放到list中,然后想要彻底退出App(也就是finsh所有的Activity),只要调用单例中的finshAllActivities()(finshAllActivities()会遍历这个list,调用list中每一元素的finsh)就可以了。
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;
}
}