Google App ANR 优化案例,android插件化

和你一起终身学****习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、开机向导时 Google DUO 概率ANR

二、开机向导时 Google Calendar 概率 ANR

三、开机向导时 ANR 弹框不show的解决方案

四、开机向导时 Google Music 概率 ANR

五、开机向导时 Google Play Store 概率 ANR

六、 Google play Store 下载apk 概率性闪退

一、开机向导时 DUO 概率ANR

=================

Log中分析主要原因是android.intent.action.LOCALE_CHANGED 广播接收超时导致的ANR

1.ANR Log 如下:


ANR Log

2.ANR 规避方案如下:


BroadcastQueue类的 processNextBroadcast方法中,当第一次开机时候,跳过此Action。

3.修改类路径如下:


/alps/frameworks/base/services/core/java/com/android/server/am/BroadcastQueue.java


public final class BroadcastQueue {

  ... ...

    final void processNextBroadcastLocked(boolean fromMsg, boolean skipOomAdj) {

        BroadcastRecord r;

          ... ...

         // 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;

                 }

            }  



        // This is safe to do even if we are skipping the broadcast, and we need

        // this information now to evaluate whether it is going to be allowed to run.

        final int receiverUid = info.activityInfo.applicationInfo.uid;

        // If it's a singleton, it needs to be the same app or a special app

          ... ...

  }

    ... ...

}



4. git diff 修改如下:


git 修改记录

二、开机向导时 Calendar 概率 ANR

=======================

1.ANR Log 如下:


Calendar ANR log

2.ANR 规避方案如下:


主要原因是 android.intent.action.LOCALE_CHANGED 广播接收超时导致的ANR。

3.修改方案


请参考修改一

三、 开机向导时,ANR 弹框不show的解决方案

=========================

刷机或者恢复出厂设置是,开机向导过程中不应该显示ANR

修改文件路径如下:

frameworks/base/services/core/java/com/android/server/am/AppErrors.java

修改AppErrors 类中 handleShowAnrUi方法,控制在开机向导时ANR弹窗。


class AppErrors {

        ... ...

        void handleShowAppErrorUi(Message msg) {

                             ... ... 

                // 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();

                        }

                }

            ... ...

        }

        ... ...

}



1. git 解决方案


git 修改差别的

四、开机向导时 Google Music 概率 ANR

===========================

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

给大家分享一份移动架构大纲,包含了移动架构师需要掌握的所有的技术体系,大家可以对比一下自己不足或者欠缺的地方有方向的去学习提升;

于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-WHGZMMHX-1711932261619)]

最后

给大家分享一份移动架构大纲,包含了移动架构师需要掌握的所有的技术体系,大家可以对比一下自己不足或者欠缺的地方有方向的去学习提升;

[外链图片转存中…(img-Kb8awihS-1711932261620)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值