您的位置:首页 > 移动开发 > Android开发

android编程 完全退出程序的方法总结

2010-10-24 09:43 363 查看
1

在2.2之前的系统 api4-7中 有一个restartPackage()函数

ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());

需要permission

<uses-permission android:name="android.permission.RESTART_PACKAGES"></uses-permission>

2

在2.2中 上面的函数不能用!额...用killBackgroundProcesses()函数 google官方文档说 restartPackage() 是killBackgroundProcesses()的一个wrapper 但是 用相同的方法调用 加入permission 不能用 只能结束当前的activity

不知道为什么

3

android.os.Process.killProcess(android.os.Process.myPid());

google文档说 只有在root activity中调用才能用

4

网上有一个哥们提到了 一个@hidden 的函数 forceStopPackage() 不过不能调用的 那哥们说可以尝试通过反射机制来获取 不太明白

5

最后 intent有一个flag FLAG_ACTIVITY_CLEAR_TOP google的官方解释是 如果被调用的activity存在于task栈中 则栈将会退出所有在它之上的activity 然后将这个intent传给栈顶的activity

显然 额....我认为是 栈底的activity是整个task的第一个被调用的activity 所以

退出按钮的代码:

Intent i_back=new Intent();
i_back.putExtra("finish", true);
i_back.setClass(Quit.this, Starter.class);
i_back.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i_back);

Starter的代码:

protected void onStart() {
// TODO Auto-generated method stub
super.onRestart();
Intent intent = getIntent();
if (intent.hasExtra("finish")) {
finish();
}
}

这是我想到的所有方法中 能用的唯一一个 但是只能退出一个task 如果软件不只有一个task栈的话 就不能用这个

网上有人说自己维护一个堆栈...有点复杂哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: