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

本文探讨了不同Android系统版本中应用重启的各种方法,包括使用restartPackage()、killBackgroundProcesses()及forceStopPackage()等函数,并讨论了这些方法的权限需求与限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值