最近了解一键清理功能,需要实现强制关闭进程的功能。下面介绍下killBackgroundProcesses()方法和forceStopPackage()方法。

killBackgroundProcesses()

ActivityManager的killBackgroundProcesses方法,可以立即杀死与指定包相关联的所有后台进程,这与内核杀死那些进程回收内存是一样的,但这些进程如果在将来某一时刻需要使用,会重新启动。该方法需要权限android.permission.KILL_BACKGROUND_PROCESSES。源码解释如下:

  1. /**
  2. * Have the system immediately kill all background processes associated
  3. * with the given package.  This is the same as the kernel killing those
  4. * processes to reclaim memory; the system will take care of restarting
  5. * these processes in the future as needed.
  6. *
  7. * <p>You must hold the permission
  8. * {@link android.Manifest.permission#KILL_BACKGROUND_PROCESSES} to be able to
  9. * call this method.
  10. *
  11. * @param packageName The name of the package whose processes are to
  12. * be killed.
  13. */
  14. public void killBackgroundProcesses(String packageName) {
  15. try {
  16. ActivityManagerNative.getDefault().killBackgroundProcesses(packageName,
  17. UserHandle.myUserId());
  18. } catch (RemoteException e) {
  19. }
  20. }

forceStopPackage()

调用此方法,系统会强制停止与指定包关联的所有事情,将会杀死使用同一个uid的所有进程,停止所有服务,移除所有activity。所有注册的定时器和通知也会移除。forceStopPackage方法源码解释如下:

  1. /**
  2. * Have the system perform a force stop of everything associated with
  3. * the given application package.  All processes that share its uid
  4. * will be killed, all services it has running stopped, all activities
  5. * removed, etc.  In addition, a {@link Intent#ACTION_PACKAGE_RESTARTED}
  6. * broadcast will be sent, so that any of its registered alarms can
  7. * be stopped, notifications removed, etc.
  8. *
  9. * <p>You must hold the permission
  10. * {@link android.Manifest.permission#FORCE_STOP_PACKAGES} to be able to
  11. * call this method.
  12. *
  13. * @param packageName The name of the package to be stopped.
  14. * @param userId The user for which the running package is to be stopped.
  15. *
  16. * @hide This is not available to third party applications due to
  17. * it allowing them to break other applications by stopping their
  18. * services, removing their alarms, etc.
  19. */
  20. public void forceStopPackageAsUser(String packageName, int userId) {
  21. try {
  22. ActivityManagerNative.getDefault().forceStopPackage(packageName, userId);
  23. } catch (RemoteException e) {
  24. }
  25. }
  26. /**
  27. * @see #forceStopPackageAsUser(String, int)
  28. * @hide
  29. */
  30. public void forceStopPackage(String packageName) {
  31. forceStopPackageAsUser(packageName, UserHandle.myUserId());
  32. }

注意使用forceStopPackage方法时,需要添加权限android.permission.FORCE_STOP_PACKAGES。同时注意该方法是隐藏的方法,需要使用反射机制调用。如下:

    1. ActivityManager mActivityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
    2. Method method = Class.forName("android.app.ActivityManager").getMethod("forceStopPackage", String.class);
    3. method.invoke(mActivityManager, packageName);  //packageName是需要强制停止的应用程序包名

最新文章

  1. Tomcat8安装, 安全配置与性能优化(转)
  2. 关于jetty项目中的问题.
  3. IIS负载均衡ARR路由请求到ARR服务器和处理服务器
  4. Unity Project Wizard (最近打开的项目记录)
  5. [iOS UI设计笔记整理汇总]
  6. SegmentFault创始人高阳:辍学后带着500元北漂,4年建成国内最大开发者
  7. Centos6.7下安装配置VPN
  8. jQuery ajax Load关闭缓存的方法
  9. Homework3
  10. 第二十六节,Python内置函数
  11. poj2104 Kth-Number
  12. 合格的IT人士需要养成的习惯:设置系统还原点
  13. 基于vue.js的简单用户管理
  14. [物理学与PDEs]第4章第2节 反应流体力学方程组 2.2 反应流体力学方程组形式的化约
  15. Web GIS系统相关
  16. LG5901 【模板】欧拉定理
  17. 【转】CSR蓝牙驱动程序引起的Win7奇怪问题
  18. Camtasia Studio CamStudio如何不录制鼠标
  19. Hive是什么
  20. jpa多条件查询重写Specification的toPredicate方法(转)

热门文章

  1. [JOYOI] 1051 选课
  2. Matlab学习笔记(四)
  3. CSU 1554 SG Value (集合类的学习)
  4. [luoguP1472] 奶牛家谱 Cow Pedigrees(DP)
  5. 洛谷P1186 玛丽卡
  6. git一个本地仓库连接多个远程仓库
  7. [bzo1211][HNOI2004]树的计数_prufer序列
  8. HDU.P1100 Trees Made to Order 解题报告
  9. dubbo安装和使用
  10. VM虚拟机的网卡模式介绍