最近了解一键清理功能,需要实现强制关闭进程的功能。下面介绍下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是需要强制停止的应用程序包名

forceStopPackage与killBackgroundProcesses方法的更多相关文章

  1. Android ActivityManager.killBackgroundProcesses方法去结束

    android2.2以后,如果服务在ondestroy里加上了start自己,用kill backgroudprocess通常无法结束自己.有一种最新发现的方法,利用反射调用forceStopPack ...

  2. android结束进程、退出application的方法

    1.finish()方法 finish是Activity的类,仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没有立即释放内存,活动的资源并没有被清理:调用finish()方 ...

  3. Android 中退出程序的几种方法

    1.finish()方法 finish是Activity的类,仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没有立即释放内存,活动的资源并没有被清理:调用finish()方 ...

  4. Android杀死进程方法

    1. android.os.Process.killProcess(pid) 只能终止本程序的进程,无法终止其它的 具体代码如下: ?12 Process.killProcess(Process.my ...

  5. [转]Android进程与线程基本知识

    转自:http://www.cnblogs.com/hanyonglu/archive/2012/04/12/2443262.html 本文介绍Android平台中进程与线程的基本知识. 很早的时候就 ...

  6. Android adb 命令

    一.概述 作为一名开发者,相信对adb指令一定不会陌生.那么在手机连接adb后,可通过am命令做很多操作: (1) 拨打电话10086 adb shell am start -a android.in ...

  7. java中的反射机制在Android开发中的用处

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

  8. [转]uses-permission权限列表

    android.permission.ACCESS_CHECKIN_PROPERTIES允许读写访问”properties”表在checkin数据库中,改值可以修改上传 android.permiss ...

  9. uses-permission权限列表

    android.permission.ACCESS_CHECKIN_PROPERTIES允许读写访问”properties”表在checkin数据库中,改值可以修改上传 android.permiss ...

随机推荐

  1. Not so Mobile (针对递归输入的函数)

      Before being an ubiquous communications gadget, a mobile was just a structure made of strings and ...

  2. [bzoj3668][Noi2014][起床困难综合症] (按位贪心)

    Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...

  3. Windows学习总结(11)——Windows批处理命令编写代码及小程序简介

    批处理(Batch)也称为批处理脚本.顾名思义,就是对某对象进行批量的处理.DOS批处理是基于DOS命令,用来自动地批量地执行DOS命令以实现特定操作的脚本.批处理是一种简化的脚本语言,它应用于DOS ...

  4. 下载Spring4.1.x源码并用IntelliJ IDEA打开-----

    下载Spring4.1.x源码并用IntelliJ IDEA打开-------https://blog.csdn.net/boling_cavalry/article/details/79426075 ...

  5. xtu summer individual 6 E - Find Metal Mineral

    Find Metal Mineral Time Limit: 1000ms Memory Limit: 65768KB This problem will be judged on HDU. Orig ...

  6. [thrift] thrift基本原理及使用

    参考文章RPC 基本原理与 Apach Thrift 初体验 RPC基本原理 RPC(Remote Procedure Call),远程过程调用,大部分的RPC框架都遵循如下三个开发步骤: 1. 定义 ...

  7. (入门SpringBoot)SpringBoot来临(一)

    .创建独立的Spring应用程序. .嵌入tomcat,Jetty或者Undertow,无需部署war文件; .允许通过Maven来获取starter; .尽可能的自动配置Spring. .提供生产就 ...

  8. 洛谷 P4057 [Code+#1]晨跑

    P4057 [Code+#1]晨跑 题目描述 “无体育,不清华”.“每天锻炼一小时,健康工作五十年,幸福生活一辈子” 在清华,体育运动绝对是同学们生活中不可或缺的一部分.为了响应学校的号召,模范好学生 ...

  9. MyBatis实体属性与表的字段不对应的解决方案

    1.通过在查询的SQL语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上,这种方式是通过在SQL语句中定义别名来解决字段名和属性名的映射关系的. ...

  10. hadoop2.2集群搭建问题只能启动一个datanode问题

    按照教程http://cn.soulmachine.me/blog/20140205/搭建总是出现如下问题: 2014-04-13 23:53:45,450 INFO org.apache.hadoo ...