处理MTK中DuraSpeed(快霸)引起的app被莫名其妙kill掉

一、问题描述

之前在MTK源码中,添加了的自定义的launcher后,发现其经常会被莫名其妙kill掉,根据错误日志找到如下描述:

DuraSpeed: Add com.my.test to the suppress list, the suppress list = [com.android.settings, com.android.calendar, com.my.launcher, com.my.test]

查了下资料,发现是因为MTK内置了一套自己的进程管理软DuraSpeed(快霸)。该软件会在后台限制"白名单"之外的进程,从而提高前台进程的性能。

简单流程就是,将启动的app加入监听队列中,当LMKD将触发会去遍历进程,如资源超过了duraspeed的设定规则,会触发onPoorHealth,去kill掉得分低的进程。或者onScreenOff后五分钟,也会forceStopPackage掉app。


二、解决步骤
方式一、关闭快霸
/** 在device/along/xxxx/ProjectConfig.mk中修改 **/
//MTK_DURASPEED_DEFAULT_ON = yes
//MTK_DURASPEED_SUPPORT = yes
MTK_DURASPEED_DEFAULT_ON = no
MTK_DURASPEED_SUPPORT = no
方式二、加入白名单
  • 以xml形式(我这套源码中没有发现此文件):
\frameworks\base\core\java\com\mediatek\runningbooster\platform_list.txt
  • 以代码形式:
/**在vendor/mediatek/proprietary/frameworks/base/services/core/java/com/mediatek/server/am/AmsExtImpl中修改**/
 public AmsExtImpl() {
       	...
        ...    
        if (isDuraSpeedSupport) {
            String className1 = "com.mediatek.duraspeed.manager.DuraSpeedService";
            String className2 = "com.mediatek.duraspeed.suppress.SuppressAction";
            String classPackage = "/system/framework/duraspeed.jar";
            Class<?> clazz = null;
            try {
                sClassLoader = new PathClassLoader(classPackage, AmsExtImpl.class.getClassLoader());
                clazz = Class.forName(className1, false, sClassLoader);
                mDuraSpeedService = (IDuraSpeedNative) clazz.getConstructor().newInstance();

                clazz = Class.forName(className2, false, sClassLoader);
                mSuppressAction = (ISuppressAction) clazz.getConstructor().newInstance();
            } catch (Exception e) {
                Slog.e("AmsExtImpl", e.toString());
            }

        //add 过滤应用 begin    
		try {
                Method method= mDuraSpeedService.getClass().getMethod("getPlatformWhitelist", null);
                //获取白名单列表
                Object obj = method.invoke(mDuraSpeedService);                
                if(obj != null && obj instanceof List) {
                        List<String> list = (List<String>) obj;
                        //加入自己的过滤app
                        list.add("com.my.launcher");
                        //更新白名单
                        method = mDuraSpeedService.getClass().getMethod("setAppWhitelist", List.class);
                        method.invoke(mDuraSpeedService, list);
                }
            }catch (Exception e){
                Slog.e("AmsExtImpl add app to whitelist ", e.toString());
            }
        }
       //add 过滤应用 end
     ...
     ...    
    }

PS:duraspeed的核心功能是以jar包导入的,具体可查看vendor/mediatek/proprietary/frameworks/opt/duraspeed_lib下的jar包。


三、参考

参考一参考二

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值