android 完全退出

//通过context获取系统服务,得到ActivityManager  

ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 

//获取当前运行中的TaskInfo   

//获取的是一个List集合,也就是说当前系统中的task有多个

//关于该方法的参数,我从源码看了下,是指返回集合的最大可能条目数,实际返回数可能 

//小于这个数目,取决于用户启动了几个task 

List<ActivityManager.RunningTaskInfo> tasks = manager.getRunningTasks(1);

ComponetName baseActivity = tasks.get(0).baskActivity;

Intent intent = new Intent();

intent.setComponent(baseActivity);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

intent.putExtra("exit", "1");

content.startActivity(intent);

在应用程序的每个Activity中的onNewIntent()函数中接收intent参数并判断退出

String exit = intent.getStringExtra("exit");

if(exit != null && exit.equals("1")){

finish();

}

这里主要利用Task找到处于栈底的Activity。再利用Intent.FLAG_ACTIVITY_CLEAR_TOP标志清空task栈中除栈底以外的activity.

注意加上权限:<uses-permission android:name=”android.permission.GET_TASKS”/>

如果应用程序中包含多个Task就去遍历依次退出吧。

还有个思路:利用startActivityForResult依次调用task栈中的baseActivity或topActivity。每次创建后结束掉它

资料:

startActivityForResult与startActivity的不同之处在于:

1, startActivity( )    

             仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( )。

2, startActivityForResult( )

             可以一次性完成这项任务,当程序执行到这段代码的时候,页面会跳转到下一个Activity,

而当这个Activity被关闭以后(this.finish()),程序会自动跳转会第一个Activity,并调用前一个Activity的onActivityResult( )方法。

android中使用startActivityForResult回传数据(转):

http://www.cnblogs.com/leon19870907/articles/2010701.html

//task栈底的Activity 

ComponentName baseActivity = task.baseActivity; 

//task栈顶的Activity 

ComponentName topActivity = task.topActivity;

注意:
多语言切换等情况时,当我们去调用处于栈底的等不可见的Activity时,系统会调用onCreate(),再调用onNewIntent()
利用广播的方法退出:当程序crash后,一些Activity会接收不到广播而无法退出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值