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栈的话 就不能用这个
网上有人说自己维护一个堆栈...有点复杂哈