Google GMS 包相关APK ANR 解决方案


极力推荐Android 开发大总结文章:欢迎收藏
程序员Android 力荐 ,Android 开发者需要的必备技能

本篇文章主要介绍 Android
开发中的部分GMS 包 相关APK ANR,闪退问题解决方案知识点,通过阅读本篇文章,您将收获以下内容:
- 开机向导时 Google DUO 概率ANR
- 开机向导时 Google Calendar 概率 ANR
- 开机向导时 ANR 弹框不show的解决方案
- 开机向导时 Google Music 概率 ANR
- 开机向导时 Google Play Store 概率 ANR
- Google play Store 下载apk 概率性闪退
1. 开机向导时 DUO 概率ANR
主要原因是 android.intent.action.LOCALE_CHANGED 广播接收超时导致的ANR。
ANR Log 如下:

ANR Log
ANR 规避方案如下:
在BroadcastQueue
类的 processNextBroadcast
方法中,当第一次开机时候,跳过此Action。路径如下:/alps/frameworks/base/services/core/java/com/android/server/am/BroadcastQueue.java
// import android.provider.Settings;
//when frist boot , ingore Google Duo anr when receive broadcast : android.intent.action.LOCALE_CHANGED
if (info.activityInfo.name.contains ("com.google.android.apps.tachyon") &&
r.intent.getAction().equals("android.intent.action.LOCALE_CHANGED")){
int deviceProvisioned = Settings.Global.getInt(mService.mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 0);
if (deviceProvisioned == 0) {
Slog.e(TAG,"switch users or first boot google duo ANR ignore");
skip = true;
}
}
历史修改记录

git 修改记录
2. 开机向导时 Calendar 概率 ANR
ANR Log 如下:

Calendar ANR log
ANR 规避方案如下:
主要原因是 android.intent.action.LOCALE_CHANGED 广播接收超时导致的ANR。
请参考修改一
历史修改记录

git 修改记录
3. 开机向导时,ANR 弹框不show的解决方案
刷机或者恢复出厂设置是,开机向导过程中不应该显示ANR。
修改文件路径如下:frameworks/base/services/core/java/com/android/server/am/AppErrors.java
修改AppErrors 类中 handleShowAnrUi方法,控制在开机向导时ANR弹窗。
解决方案

git 修改差别的
// If we've created a crash dialog, show it without the lock held
if (d != null) {
int deviceProvisioned = Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED,0);
if(proc.userId == 0){
if(deviceProvisioned == 0 && !proc.processName.equals("com.google.android.setupwizard")){
mService.killAppAtUsersRequest(proc, null);
}else{
d.show();
}
} else {
d.show();
}
}
4. 开机向导时 Google Music 概率 ANR
开机向导时候 接收android.intent.action.LOCALE_CHANGED 广播超时导致的ANR。
ANR Log 如下:

ANR Log
ANR 规避方案如下:
请参考修改一
5.开机向导时 Google Play Store 概率 ANR
开机向导时候 接收android.intent.action.LOCALE_CHANGED 广播超时导致的ANR。
ANR Log 如下:

ANR Log
ANR 规避方案如下:
请参考修改一
2. Google play Store 下载apk 概率性闪退
低内存情况下,使用play Store 下载多个apk,playstore 概率性ANR。
闪退 Log 信息

Google Play Store 被kill Log信息
解决闪退问题方法
在ActivityManagerService 中的applyOomAdjLocked 方法中修改adj值,防止apk 低内存情况下被杀掉。
frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

解决闪退方案
// add by wangjie for google play store was killed in sometime
if(app.curAdj>3){
if( app.processName.equals("com.android.vending") ||app.processName.equals("com.google.android.gms")){
app.curAdj = 3;
}
}
// add by wangjie for google play store was killed in sometime


至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。

既然都看到这里,领两个红包在走吧!
以下两个红包每天都可以领取
1.支付宝搜索 522398497,或扫码支付宝红包海报。

支付宝扫一扫,每天领取大红包
2.微信红包,微信扫一扫即可领取红包

微信扫一扫,每天领取微信红包
小礼物走一走,来简书关注我
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!