剛剛學習到的Android有效的完全退出App的方法,記錄一下

最近在寫一個包含兩個Activity和一個Service的App,這個App須要實現完全退出的功能,也就是關閉全部Activity而且結束Service。
093450_HI8W_323.pngjava

結束Service的方法比較明確,使用stopService就能夠了,關鍵是想要結束全部Activity就須要費點勁了,一開始我嘗試用android

.getSystemService(ACTIVITY_SERVICE).killBackgroundProcesses(getPackageName());

這樣的方法來結束掉全部Activity,可是試了一下,沒有效果。而後Google了一下,看到了這篇文章,文章中的方法仍是比較簡單管用的,而後我又按照本身的須要對這個文章中提供的方法作了一些修改,如今基本上實現了個人App的需求。app

這個方法其實很簡單,就是在一個單例中維護一個Activity的list,在每一個Activity的onCreate中調用這個單例的addActivity(),把當前Activity放到list中,而後想要完全退出App(也就是finsh全部的Activity),只要調用單例中的finshAllActivities()(finshAllActivities()會遍歷這個list,調用list中每一元素的finsh)就能夠了。post

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;
    }
}
相關文章
相關標籤/搜索