一、问题描述
之前在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包。
三、参考
参考一、 参考二
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/17917.html