Android系统级开发清理功能的一些记录和发现

  • 客户需求做一键清理所有后台进程的功能,在查阅网上相关博客以及自己研究以后找到以下几种方法:

killBackgroundProcesses()

这种方式比较常规,packageName是需要停止的应用的包名,但这种方式实测之后进程有很大概率重启。(不能完全杀死进程)

ActivityManager.killBackgroundProcesses(packageName);//packageName为所需要停止的包名

此方法需要权限:

<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>

forceStopPackage()

 这种方式在系统级应用中才有作用,可以完全杀死任何进程,但是无法移除其在近期任务列表(RecentsActivity)中的显示,因此用户打开近期任务列表,还是能看到该应用的入口,点击后可以重新进入应用,影响用户体验。
    Method method = null;method = Class.forName("android.app.ActivityManager").getMethod("forceStopPackage", String.class);if (method != null) {method.setAccessible(true);for (String mcleanApp : cleanApp) {method.invoke(activityManager, mcleanApp);  //packageName是需要强制停止的应用程序包名}}
这种方式需要添加权限:
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>
<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"/>
因为是系统权限,因此添加后会飘红,不用理会,可以编译过。
同时在application的节点处添加android:sharedUserId="android.uid.system",让你的应用运行在系统进程。
  <applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:sharedUserId="android.uid.system"android:supportsRtl="true"android:theme="@style/AppTheme">

Android.mk文件的配置如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := phoneclean-release
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
#LOCAL_MULTILIB := 32
include $(BUILD_PREBUILT)

这种方式需要你的app作为系统内置应用才有效果,亲测如果缺少以上任意配置,无法起到杀死进程的效果。

onTaskViewDismissed

做应用层开发的小伙伴可能对这个方法比较陌生,这是近期任务列表RecentsView的一个方法,用于移除显示的进程view,移除后,该进程也终止,因此能起到杀死进程的作用。这个方法的用法如下:
if((t.key.baseIntent.getComponent().getPackageName()).equals(packagename)){mRecentsView.onTaskViewDismissed(t);}

这里的t是Task,即任务栈里的每一个任务,要获取RecentsView里的所有Task只需两层for循环即可搞定,方法如下:

for (int i = 0; i < stacks.size(); i++) {TaskStack stack = stacks.get(i);ArrayList<Task> tasks = stack.getTasks();int taskCounts = tasks.size();for (int j = 0; j < taskCounts; j++) Task t = tasks.get(j);if((t.key.baseIntent.getComponent().getPackageName()).equals(packagename)){mRecentsView.onTaskViewDismissed(t);}                                           }

需要做一键清理功能的同学可以直接在RecentsView定义方法来实现,用意思挨个获取的方法效率不高,以上为博主需要清理特定应用才如上实现。

Other

除了上述几种方式外,还有其他几种方法,例如android.os.Process.killProcess等,请查阅网上相关资料即可。另外,博主在开发过程中未发现应用级app能完全清理掉进程的方法,如有大神知道,还望不吝赐教,以上内容如有错误,还望指出。(据同事说还有一种在手机root后调用root权限去清理,待博主去验证一下。)

Android系统级开发进程清理功能的一些记录和发现相关推荐

  1. Android系统级开发进程清理功能的一些记录和发现(一)

    Android系统级开发清理功能的一些记录和发现 客户需求做一键清理所有后台进程的功能,在查阅网上相关博客以及自己研究以后找到以下几种方法: killBackgroundProcesses() 这种方 ...

  2. Android系统级开发进程清理功能的一些记录和发现(二)

    基于Android 7.0的近期任务列表进程清理实现 最近有小伙伴反应,上篇博客中提到的直接修改近期任务列表的方法在7.0的系统中无法使用,因为找不到onTaskViewDismissed()这个方法 ...

  3. Android系统源码目录及功能介绍

    Android的移植按如下流程:     1.android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来.     2.正确挂载文件系统,确保内核启动参数和 android 源代码 ...

  4. Android系统中的进程管理:内存的回收

    本文是Android系统进程管理的第三篇文章.进程管理的前面两篇文章,请参见这里: Android系统中的进程管理:进程的创建 Android系统中的进程管理:进程的优先级 本文适合Android平台 ...

  5. Android系统中的进程管理:进程的优先级

    本文是Android进程管理系列文章的第二篇,会讲解进程管理中的优先级管理. 进程管理的第一篇文章:<进程的创建>请跳转至这里. 本文适合Android平台的应用程序开发者,也适合对于An ...

  6. Android系统中的进程管理:进程的创建

    对于操作系统来说,进程管理是其最重要的职责之一. 考虑到这部分的内容较多,因此会拆分成几篇文章来讲解. 本文是进程管理系统文章的第一篇,会讲解Android系统中的进程创建. 本文适合Android平 ...

  7. 利用 Android 系统原生 API 实现分享功能

    对于 App 的分享功能,基本上是一个刚需,本文主要介绍运用系统原生分享功能时候需要注意的一些问题.对于某些特定平台的一些高级分享特性,比如微信或者微博之类的分享来源标注,需要在其开放平台注册应用再接 ...

  8. android实现全局悬浮窗,android 系统级的悬浮窗实现

    android系统级悬浮球的实现流程 当我们在使用的app的时候,如果需要实时观测到某个功能的实时进度并且不影响其他的操作的时候或者不影响使用其他应用的时候,系统级的悬浮球是个非常不错的选择. 首先我 ...

  9. Android系统在新进程中启动自定义服务过程(startService)的原理分析 (下)

    Step 10. ActivityManagerService.attachApplicationLocked 这个函数定义在frameworks/base/services/java/com/and ...

最新文章

  1. 51CTO -- 网络自学的瓶颈期
  2. django url 生效_Django基础知识
  3. 谷歌浏览器安卓_谷歌终于动手了,安卓将在国内收费,免费的午餐到头了!
  4. 问题分享:最近测试VDI-in-a-Box使用AD做身份验证出现以下错误提示:
  5. 在CentOS 7上安装Node.js的4种方法(yum安装和源码安装)
  6. Atitit 资源类型的分类法规范MIME类型类型 目录 1.1. 一个MIME类型至少包括两个部分:一个类型(type)和一个子类型(subtype)。 1 1.2. 命名格式MIME类型包括一个
  7. linux学习入门之Linux系统目录结构
  8. Linux文件及目录常用命令
  9. css svg做动图,用svg动态绘制图形
  10. 企业微信来了,尽管“定位打卡”功能愁死个人,但它有可能逼死一个产业
  11. java io 设备未就绪,GRADLE遇见“设备未就绪”
  12. python开发大型游戏_用Python做大型游戏合适吗?
  13. MG323所有命令使用
  14. vue cli4使用axios(通过RAP2生成后端接口)
  15. 汇编语言----mul指令
  16. 中国科学院大学计算机复试考什么区别,中国科学院大学考研复试流程及经验分享...
  17. 数据绑定控件收藏 DropDownList ListBox GridView DataList Repeater FormView DetailsView
  18. 大厂面试核心知识点梳理
  19. android的spinner
  20. react-native通信流程

热门文章

  1. 读博士与坐牢的惊人相似
  2. 提高个人工作效率的五大软件,你肯定不知道
  3. python中随机整数生成random.randint和random.randrange的区别
  4. 教室灯具照明设计要点,学校教室常用灯具、光源类型
  5. LeetCode 134 加油站 全面详细题解【持续更新所有解法】
  6. 【English】七月英语总结
  7. 8月28日服务器例行维护公告,【已开服】[8月28日]全服更新维护公告
  8. DBA面试资源合集(含Oracle、MySQL、Redis等)
  9. curl php 传递meta标签内容,php中get_meta_tags()、CURL与user-agent用法分析
  10. Google文件系统 GFS