博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android程序完全退出
阅读量:6657 次
发布时间:2019-06-25

本文共 1568 字,大约阅读时间需要 5 分钟。

有几个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
 
所有创建的服务会停止,还会发一个广播   
 
Intent.ACTION_PACKAGE_RESTARTED
 
导致所有注册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,使用方法比较简

 

单。

 

 

   ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 

 

   am.killBackgroundProcesses("cn.com.android123.cwj");   // API Level至少为8才能使用

 

所以要用此方法最好加个判断如果是2.2之前的rom就用restartPackage之后的就用killBackgroundProcesse

转载于:https://www.cnblogs.com/xiaochao1234/p/3652023.html

你可能感兴趣的文章
linux下重新分区、数据备份相关(parted、dd等命令)
查看>>
【转】【玩转cocos2d-x之二十三】多线程和同步03-图片异步加载
查看>>
yii cgridview 如何显示图片
查看>>
Shallow copy and Deep copy
查看>>
C语言小结
查看>>
Java的JDBC事务详解(转)
查看>>
Linux防火墙的关闭和开启(转)
查看>>
curl_setopt函数相关应用及介绍(转)
查看>>
vue小技巧
查看>>
CDOJ 92 Journey LCA乱搞
查看>>
Spring BOOT PERFORMANCE
查看>>
Go语言打造以太坊智能合约测试框架(level3)
查看>>
浏览器如何渲染网页?
查看>>
无损压缩图片心得(二)
查看>>
DLL文件是怎么产生的,DLL文件是什么,DLL文件有什么用
查看>>
防止用户直接在地址栏输入URL浏览文件
查看>>
网页入门
查看>>
树B是否为树A的子结构
查看>>
383. Ransom Note
查看>>
HDU-4274 Spy's Work dfs搜索
查看>>