Android系统级开发进程清理功能的一些记录和发现
来源:互联网 发布:畅捷通软件介绍 编辑:程序博客网 时间:2024/06/08 01:00
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",让你的应用运行在系统进程。
<application android: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 installedLOCAL_MODULE := phoneclean-releaseLOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := $(LOCAL_MODULE).apkLOCAL_MODULE_CLASS := APPSLOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)LOCAL_CERTIFICATE := platformLOCAL_PRIVILEGED_MODULE := true#LOCAL_MULTILIB := 32include $(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权限去清理,待博主去验证一下。)
阅读全文
1 0
- Android系统级开发进程清理功能的一些记录和发现
- Android系统级开发进程清理功能的一些记录和发现(一)
- Android系统级开发进程清理功能的一些记录和发现(二)
- Fedora Core 2系统备份的一些发现和问题
- Fedora Core 2系统备份的一些发现和问题
- 获取android系统的一些功能
- 记录android开发用到的功能点
- android开发的一些技巧记录
- 开发Android,记录一些琐碎的知识
- android camera开发的一些问题记录
- 模仿360卫士升级(增加主界面清理进程和流量统计的功能)
- 使用vc发现的一些问题记录
- Android开发中常用到的一些功能
- iOS开发-清理缓存功能的实现
- iOS开发-清理缓存功能的实现
- iOS开发-清理缓存功能的实现
- iOS开发-清理缓存功能的实现
- iOS开发-清理缓存功能的实现
- miniui表格分页(mybatis)
- C++fstream,ifstream和outstream读取文件最后一行注意
- POJ 1273 Drainage Ditches 网络流 ISAP
- C++ 带默认形参值的函数
- CPU中的八个通用寄存器
- Android系统级开发进程清理功能的一些记录和发现
- Ubuntu 16.04 安装Opencv3.1.0 (选装opencv_contrib模块)
- java-09
- 如何mount guest vm的parition到dom0
- bzoj1901Zju2112 Dynamic Rankings 带修改可持久化线段树
- STM32F103系列读写LCD1604显示屏
- Android MediaPlayer与SeekBar和Chronometer的简单结合
- 安卓自定义view仿小米商城购物车动画
- LeetCodeOJ_002: Add Two Numbers