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


    一、前言

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

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

    二、代码实现

    2.1 权限部分

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

    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">
    
    • 1
    • 2
    • 3
    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);
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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"
                // …… 省略……
        };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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);
                }
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    在这里插入图片描述

    三、结尾

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

  • 相关阅读:
    CentOS7安全配置
    Python - 小玩意 - 请求网络地址获取网页链接
    基于SSM框架的校园疫情防控健康打卡系统
    Winform 多语言化快速解析替换工具-1分钟一个界面
    【问题记录】pandas:OverflowError: Python int too large to convert to C long
    json数据和文件操作
    【论文笔记】(FGSM)Explaining and Harnessing Adversarial Examples
    Alibaba/IOC-golang 正式开源 ——打造服务于go开发者的IOC框架
    记录一次Linux挂载NAS共享的SMB文件系统经历
    MySQL数据类型的选择(详解版)
  • 原文地址:https://blog.csdn.net/yyzsyx/article/details/127410896