一键退出栈内所有activity

在上班的时候遇到了这样一种情况,有一个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);	//杀死当前进程

都没有很好的效果,于是乎:

165712_Ya70_2896194.png

写了个广播接收器

165749_prma_2896194.png

再基类中注册此接收器,利用简单的接口回调就可以在接收器中重写的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实例存在

*@return

*/

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);

}

转载于:https://my.oschina.net/lamYu/blog/908277

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值