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

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栈的话 就不能用这个

网上有人说自己维护一个堆栈...有点复杂哈

你可能感兴趣的:(android编程 完全退出程序的方法总结)