MTK Android12-13 -Intent Filter Verification Service 停止运行 问题修复
文章目录
最近不同客户陆续反馈项目无缘无故报错:Intent Filter Verification Service 停止运行。 大货项目,都出货一两年了,偶发性陆陆续续有客户反馈问题了。
参考资料
上基本无相关资料参考,系统或者谷歌ROOM是由StatementService 的,但是相关介绍资料也是无,这里给出自己找到的资料,可以参考。对于StatementService 其它介绍可以自行
找资料看看。
Hide malfunction dialogs for StatementService
解决方案-修改文件
\frameworks\base\core\res\res\values\config.xml
<!-- List of comma separated package names for which we the system will not show crash, ANR,
etc. dialogs. -->
<string translatable="false" name="config_appsNotReportingCrashes">com.android.statementservice</string>
源码分析
源码 StatementService
我们看看 StatementService 到底是什么
$ find . -name StatementService
./frameworks/base/packages/StatementService
原来这就是一个App,但是通过有限的资料查阅,暂时没有ROOM厂家去掉这个app。 那思路就把这个app 放到白名单里面,不然弹框,ANR、停止运行。
所以我们在配置中去修改它:
配置加载config_appsNotReportingCrashes
反推,我们看看这个配置是在哪里加载的,是真的可以屏蔽弹框吗?
我们发现是在AMS 里面加载的,多么似曾相识的感觉呀…
ActivityManagerService -retrieveSettings 加载配置
我们看看实际加载这个配置的地方:
AppErrors-loadAppsNotReportingCrashesFromConfig 方法
void loadAppsNotReportingCrashesFromConfig(String appsNotReportingCrashesConfig) {
if (appsNotReportingCrashesConfig != null) {
final String[] split = appsNotReportingCrashesConfig.split(",");
if (split.length > 0) {
synchronized (mBadProcessLock) {
mAppsNotReportingCrashes = new ArraySet<>();
Collections.addAll(mAppsNotReportingCrashes, split);
}
}
}
}
这里通过 逗号 来分割,添加到集合里面,其实就是白名单集合
屏蔽显示Crash 和 ANR - handleShowAppErrorUi
上面loadAppsNotReportingCrashesFromConfig 方法,看到 加载配置里面的数据,用逗号分割开来,然后放到集合里面去。
如果崩溃、anr 的包名 不在 集合里面,那么就允许弹框。分析到这里逆向反推,修改配置是有用的。
总结
- 分析源码、参考资料解决 Intent Filter Verification Service 停止运行 错误
- 这里其实其实延伸来看就是屏蔽部分包名ANR、崩溃弹框的解决方案。