Android P 性能优化:创建APP进程白名单,杀死白名单之外的进程

简介: 本文介绍了在Android P系统中通过创建应用进程白名单并杀死白名单之外的进程来优化性能的方法,包括设置权限、获取运行中的APP列表、配置白名单以及在应用启动时杀死非白名单进程的代码实现。

一、前言

最近开发过程中,因系统内存相对比较紧张,在启动某些CPU、内存占用比较大的APP的时候,就需要清理一下,把能杀的都杀掉,给前台进程腾出系统资源。

  • 缺陷:对于persist进程,以及一些流氓APP(杀死后还自己起来的),还得想别的办法处理

二、代码实现

2.1 权限部分

  • 要杀死其他APP进程,需要拥有下面权限,请添加到 AndroidManifest.xml 的权限声明列表中
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>

2.2 获取正在运行的APP列表

  • 在Andorid P的版本里,下面的API接口,只有拥有"android.uid.system"、系统签名的APP上才能正常使用
  • 如果不具备"android.uid.system",则只能获取到自己当前进程的名称字符串
2.2.1 设置 android:sharedUserId
  • 修改AndroidManifest.xml的开头部分,添加 android:sharedUserId=“android.uid.system”
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:sharedUserId="android.uid.system"
    package="com.future.xyz.multimediacenter">
2.2.2 获取进程列表
  • 如下,使用activityManager .getRunningAppProcesses()接口获取
 ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

        List<ActivityManager.RunningAppProcessInfo> list = activityManager .getRunningAppProcesses();
        int i = list.size();
        Log.i(TAG, String.valueOf(i));
        for (int j = 0; j < list.size(); j++) {
   
   
            Log.i(TAG,"zs, processName: "+ list.get(j).processName);
        }

2.3 设置白名单

  • 将不需要杀死的APP的包名添加进去
  private String mProcWhiteList[] = {
   
            
            ,"com.android.providers.tv"
            ,"com.mediatek.tvinput"
            ,"com.dangbei.lerad.vesuvius.sample"
//            ,"com.ktcp.tvvideo"
            ,"com.android.browser"
            ,"com.hisense.client"
            ,"com.android.soundrecorder"
//            ,"com.zk.tvwizard"
            ,"com.android.inputmethod.pinyin"
            ,"com.android.defcontainer"
            ,"system"
            ,"com.ms.weshare"
            // …… 省略……
    };

2.4 杀死白名单外的进程

  • 如下在当前APP启动的onCreate阶段,先杀一遍
 Log.d(TAG, "zs,  onCreate ");
        ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

        List<ActivityManager.RunningAppProcessInfo> list = activityManager .getRunningAppProcesses();
        int i = list.size();
        Log.i(TAG, String.valueOf(i));
        for (int j = 0; j < list.size(); j++) {
   
   
            Log.i(TAG,"zs, processName: "+ list.get(j).processName);
            Boolean killProc = true;
            for(int k=0; k<mProcWhiteList.length; k++){
   
   
                if(mProcWhiteList[k].equals(list.get(j).processName)){
   
   
                    killProc = false;
                }
            }
            if(killProc){
   
   
                activityManager.killBackgroundProcesses(list.get(j).processName);
                Log.d(TAG, "zs,  killed  "+list.get(j).processName);
            }
        }

2.5 打印

2022-10-19 16:46:38.859 6390-6390/com.future.xyz.multimediacenter D/DeviceListActivity: zs,  onCreate 
2022-10-19 16:46:38.860 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.dangbei.mimir.lightos.home
2022-10-19 16:46:38.860 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.future.xyz.multimediacenter
2022-10-19 16:46:38.861 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.mediatek.wwtv.tvcenter
2022-10-19 16:46:38.861 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.android.keychain
2022-10-19 16:46:38.861 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.android.defcontainer
2022-10-19 16:46:38.861 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.utv.android
2022-10-19 16:46:38.872 6390-6390/com.future.xyz.multimediacenter D/DeviceListActivity: zs,  killed  com.utv.android
2022-10-19 16:46:38.872 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.mediatek.network
2022-10-19 16:46:38.872 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.kingboard.settings
2022-10-19 16:46:38.877 6390-6390/com.future.xyz.multimediacenter D/DeviceListActivity: zs,  killed  com.zk.settings
2022-10-19 16:46:38.877 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.android.inputmethod.latin
2022-10-19 16:46:38.877 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.fanzc
2022-10-19 16:46:38.877 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.zk.tvass
2022-10-19 16:46:38.877 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.android.tv.settings
2022-10-19 16:46:38.878 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.dangbei.lerad.vesuvius.sample
2022-10-19 16:46:38.878 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.talkingdata.sdk.TDAntiCheatingService
2022-10-19 16:46:38.878 6390-6390/com.future.xyz.multimediacenter D/DeviceListActivity: zs,  killed  com.talkingdata.sdk.TDAntiCheatingService
2022-10-19 16:46:38.878 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.android.bluetooth
2022-10-19 16:46:38.878 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.mediatek.tvinput
2022-10-19 16:46:38.878 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.ms.weshare
2022-10-19 16:46:38.879 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.mediatek.tvinputservice.arbitratorservice
2022-10-19 16:46:38.881 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.mediatek.TimeMeasurementAgent
2022-10-19 16:46:38.881 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.mediatek.hotkey.dispatcher
2022-10-19 16:46:38.881 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.android.se
2022-10-19 16:46:38.881 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.zk.extracontrol
2022-10-19 16:46:38.882 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.dangbei.speech
2022-10-19 16:46:38.882 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.aispeech.tvui
2022-10-19 16:46:38.882 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: com.android.systemui
2022-10-19 16:46:38.883 6390-6390/com.future.xyz.multimediacenter I/DeviceListActivity: zs, processName: system

在这里插入图片描述

三、结尾

对于persist进程(自启动),以及一些流氓APP(杀死后还自己起来的),还得想别的办法处理。

相关文章
|
1月前
|
算法 数据处理 Android开发
掌握安卓性能优化的秘诀:电池寿命与运行效率的提升
【10月更文挑战第6天】 本文深入探讨了安卓应用开发中的性能优化技巧,重点分析了影响电池寿命和运行效率的关键因素,并提供了针对性的优化策略。通过代码优化、资源管理、后台任务处理等方法,开发者可以显著提升应用的续航能力和流畅度。同时,结合具体案例,展示了如何在实际开发中应用这些技巧,确保应用在各种场景下都能保持高效运行。本文旨在为安卓开发者提供实用的性能优化指导,助力其打造更优质的应用体验。
46 2
|
1月前
|
XML Java 数据库
安卓项目:app注册/登录界面设计
本文介绍了如何设计一个Android应用的注册/登录界面,包括布局文件的创建、登录和注册逻辑的实现,以及运行效果的展示。
140 0
安卓项目:app注册/登录界面设计
|
10天前
|
Android开发 开发者
Android性能优化——内存管理的艺术
Android性能优化——内存管理的艺术
|
16天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
28 5
|
16天前
|
缓存 数据库 Android开发
安卓开发中的性能优化技巧
【10月更文挑战第29天】在移动应用的海洋中,性能是船只能否破浪前行的关键。本文将深入探讨安卓开发中的性能优化策略,从代码层面到系统层面,揭示如何让应用运行得更快、更流畅。我们将以实际案例和最佳实践为灯塔,引领开发者避开性能瓶颈的暗礁。
34 3
|
24天前
|
程序员 开发工具 Android开发
Android|WebView 禁止长按,限制非白名单域名的跳转层级
如何限制 WebView 仅域名白名单网址能随意跳转,并禁用长按选择文字。
30 2
|
1月前
|
存储 缓存 网络协议
5个Android性能优化相关的深度面试题
本文涵盖五个Android面试题及其解答,包括优化应用启动速度、内存泄漏的检测与解决、UI渲染性能优化、减少内存抖动和内存溢出、优化网络请求性能。每个问题都提供了详细的解答和示例代码。
26 2
|
1月前
|
监控 测试技术 Android开发
掌握安卓性能优化的关键策略
【10月更文挑战第7天】 在移动应用开发领域,性能优化是一项至关重要的任务。本文将探讨安卓应用性能优化的重要性、关键策略以及实际操作建议,帮助开发者提升应用的用户体验和竞争力。通过深入浅出的方式,我们将从背景介绍到具体实践,全面解析安卓性能优化的各个维度。
|
2月前
|
Java 数据库 Android开发
一个Android App最少有几个线程?实现多线程的方式有哪些?
本文介绍了Android多线程编程的重要性及其实现方法,涵盖了基本概念、常见线程类型(如主线程、工作线程)以及多种多线程实现方式(如`Thread`、`HandlerThread`、`Executors`、Kotlin协程等)。通过合理的多线程管理,可大幅提升应用性能和用户体验。
123 15
一个Android App最少有几个线程?实现多线程的方式有哪些?
|
2月前
|
存储 开发工具 Android开发
使用.NET MAUI开发第一个安卓APP
【9月更文挑战第24天】使用.NET MAUI开发首个安卓APP需完成以下步骤:首先,安装Visual Studio 2022并勾选“.NET Multi-platform App UI development”工作负载;接着,安装Android SDK。然后,创建新项目时选择“.NET Multi-platform App (MAUI)”模板,并仅针对Android平台进行配置。了解项目结构,包括`.csproj`配置文件、`Properties`配置文件夹、平台特定代码及共享代码等。
163 2

热门文章

最新文章