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会接收不到广播而无法退出