打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android程序完全退出

Android程序完全退出  

2012-02-21 09:12:00|  分类: android |字号 订阅

有几个activity,有一需求是在一个activityA点击back键退出系统而不是跳到之前的activity
    首先想到的是清空activityA的堆栈,使用intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 但是该activityA不是已经存在于
堆栈底端的,所以清除的只是堆栈中该activityA上面的activity,但后退后还是会返回堆栈中该activityA下面的activity。
    然后想到的是截获back按键的事件,使用System.exit(0)和android.os.Process.killProcess(android.os.Process.myPid())来退
出程序,还是不行,当前的activityA是被干掉了,但是还是会被ActivityManager接管返回到前一个activity。而且如果之前activity需要一
些传过来的参数的话会导致程序连续抛异常。
    最后终于找到一个可行的方法:使用ActivityManager彻底退出程序
ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);   
manager.restartPackage(getPackageName()); 
需要声明权限<uses-permission android:name="android.permission.RESTART_PACKAGES"/>
这种方法会终止一切和这个程序包关联的,所有共享同一uid的process被kill,所有的activity会被removed
所有创建的服务会停止,还会发一个广播   
导致所有注册alarms 被stopped, notifications 被removed。
   这几天刷了2.2的rom发现restartPackage方法无效,网上搜了下答案:
 在Android 2.2中新增了一个API可以帮助我们杀死后台进程,不过Android123再次强调其调用的API Level最小为8,
killBackgroundProcesses是android.app.ActivityManager类的方法,使用时必须在androidmanifest.xml文件中加入
KILL_BACKGROUND_PROCESSES这个权限。虽然本类还提供了restartPackage (String packageName) 方法调用的API Level为
3,但是SDK中已经标记为deprecated,其实他们的原理都是一样的,只不过过去Google的命名方式确实不是很合理,restartPackage
的作用很难让我们联想到是结束进程。

 

 

   该方法的原型 public void killBackgroundProcesses (String packageName)  仅有一个参数为package Name,使用方法比较简

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Android:分析app、Process、Task之间的区别,以及获取最近运行的程序(近...
Android完全关闭应用程序
Android内存管理详解(关于程序退出)
AndroidManifest详解之Application(有图更好懂)
ActivityManager: Warning: Activity not starte...
关于android应用程序使用ActivityManager退出的问题!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服