在上班的时候遇到了这样一种情况,有一个activity是单例的模式,其中的activity执行了finish后本来想执行退出app功能的,但是栈中还有activity所以退出不了程序,同时也试了其它的方法,例如:
System.exit(0);
ActivityManager manager = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE); //获取应用程序管理器 manager.killBackgroundProcesses(getPackageName()); //强制结束当前应用程序
int pid = android.os.Process.myPid(); //获取当前应用程序的PID android.os.Process.killProcess(pid); //杀死当前进程
都没有很好的效果,于是乎:
写了个广播接收器
再基类中注册此接收器,利用简单的接口回调就可以在接收器中重写的onReceiver方法中得到acticity的引用,然后就是当接收到广播的时候调用Activity的finish方法就可以实现结束所有activity,当然,我在简书上看到了另一个我觉得可行的很巧妙的方法,现在我贴出来
===============================================================
1、第一种方法是利用Activity的启动模式:设置程序中的第一个activity比如WelcomeActivity的启动模式为,android:launchMode="singleTask",这种模块的特点是当activity销毁时,之前启动的activity也会销毁,注意在跳转到其他activity时不要finish掉,当要结束时整个应用时先调用
Intent intent=new (contex,WelcomeActivity.class);跳到WelcomActivity,然后finish退出welcomeActivity即可。
2、第二种方法建一个activity的管理类:一般新建一个基类BaseActivity,然后在基类的onCreate()中添加,在onDestroy()中删除。
packagecn.sportsface.pioneer.util;
importandroid.app.Activity;
importjava.util.LinkedList;
importjava.util.List;
/**
* Activity的管理类
* Created by zhuliyi on 2016/3/29.
*
*/
public classActivityManagerUtils {
/**
* 转载Activity的容器
*/
privateListactivityList=newLinkedList();
private staticActivityManagerUtilsinstance=newActivityManagerUtils();
/**
* 将构造函数私有化
*/
privateActivityManagerUtils(){};
/**
* 获取ActivityManagerUtils的实例,保证只有一个ExitAppUtils实例存在
*/
public staticActivityManagerUtilsgetInstance(){
returninstance;
}
/**
* 添加Activity实例到mActivityList中,在onCreate()中调用
*@paramactivity
*/
public voidaddActivity(Activity activity){
activityList.add(activity);
}
/**
* 从容器中删除多余的Activity实例,在onDestroy()中调用
*@paramactivity
*/
public voidremoveActivity(Activity activity){
if(activityList.contains(activity)){
activityList.remove(activity);
}
}
/**
* 退出程序的方法
*/
public voidexit(){
// for (Activity activity:activityList) {//这个操作有误,因为activity在栈中的左右顺序是先进后出,这个方法先把栈底的元素给finish掉,不合乎常理,程序会出错
// activity.finish();
// }
for(inti=activityList.size()-1;i>=0;i--){
Activity activity=activityList.get(i);
activity.finish();
}
System.exit(0);
}