刚刚学习到的Android有效的彻底退出App的方法,记录一下

756 查看

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