• Seven
    2018-12-13
    明明是Android开发课,但是绍文老师在很多文章中都会提到Linux,JVM相关的知识,深入优化就是深入底层啊,目前的能力不足以消化这篇文章,同时希望绍文老师和鹏飞老师推荐相关书籍
    
     34
  • George吴逸云
    2018-12-13
    已经掉队了,底层基础太差了😭
    
     14
  • catkin
    2018-12-13
    张老师,看完这篇文章我已经开始怀疑人生了,掌握这么多知识您是怎么办到的,而且对那些黑科技了如指掌,还能举一反三,感觉就跟玩一样!能不能赐教一下怎么做到的?
     2
     7
  • 黄庭洗凡浊
    2019-05-29
    就开篇前两章看懂了 之后看到现在一脸懵逼 我还是早点转行吧
    
     6
  • 希夷
    2018-12-15
    如果给完全没有卡顿的APP打分100的话,对于大厂的APP本来就有90分,追求的是如何将分数提到95,98,99,甚至100,邵文老师所讲主要也是针对这块;但对于很多想我这样的小公司开发者来说,受人力物力时间所限,想做到的其实是先达到90分,而这块专栏涉及的有限,对于跟我类似的受众不够友好。

    作者回复: 其实不是,这个专栏我更关注的是人的成长,而不是具体应用到哪里。

    当然可以把知识转化应用到工作中效果会更加好

    
     4
  • x-ray
    2018-12-13
    作者您好,我们应用的很多用户,android系统都是4.4版本的,因为分包dex优化的原因,导致第一次安装或者版本升级时启动的时间非常的长,想问问您有什么好的优化措施,谢谢
     2
     4
  • 雪人
    2019-03-05
    老师,看了您这些内容,对我的第一感觉是要对源码很熟悉,那您对学习源码有什么建议吗,(看的晚了,不知道现在评论还会不会回)

    作者回复: 看源码还是需要带着目的去看,例如渲染相关,类加载流程,不要漫无目的的去看

    
     3
  • 东方
    2018-12-14
    给大家推荐一个方法,解析Traceview生成的trace文件,即可知道这个阶段所有运行的函数,序列化一下,就能生成需要插桩的白名单列表。
    
     3
  • eyeandroid
    2019-04-24
    请教下老师,hook抓到的systrace里面有其它进程的信息吗,跟python systrace.py抓到的内容有什么差别

    作者回复: 其实信息都是一样的,hook的作用是可以用到线上。但是一般会过滤掉一些信息,只上报最感兴趣的部分

    
     2
  • 小洁
    2019-04-18
    请问下,目前有个需求是对卡顿和启动耗时做性能指标线上预警,对于 activity、fragment的生命周期启动耗时的监控数据,还有主线程卡顿堆栈的数据,应该按什么的维度去统计比较合理呢

    作者回复: 初期的时候我们不建议一下子铺的太开,一步一步来并且要真正的发现现实的问题。

    可以先从卡顿和ANR的捕获先开始做,对卡顿堆栈做聚合排序。启动的话一般只是一个统计指标,或者我们也可以把启动拆成多个步骤作为监控

    
     2
  • Jerry银银
    2020-02-07
    老师好!
    文中提到,卡顿监控三大类方法:
    1、基于Android系统的消息队列机制
         a) 通过替换 Looper 的 Printer 实现
         b) 通过一个监控线程,每隔一段时间(例如: 1 秒)向主线程消息队列的头部插入一条空消息,然后监测空消息是否被消费

    2、插桩

    3、Facebook 开源库Profilo的方案


    文中有这么一段话:“基于性能的考虑,线上只会监控主线程的耗时。微信的 Matrix 使用的就是这个方案,因为做了大量的优化,所以最终安装包体积只增大 1~2%,平均帧率下降也在 2 帧以内。虽然插桩方案对性能的影响总体还可以接受,但只会在灰度包使用。“

    这段话的意思,微信用的是第一种方案中b方案吗?

    希望老师解答!

    展开
    
     1
  • VK
    2019-05-18
    绍文老师,想问下卡顿信息监控上报,有什么策略判断吗,哪些方法函数需要监控,哪些不需要监控?

    作者回复: 一般都是全局监控的吧,类似ANR一样

    
     1
  • 斑马线
    2019-02-25
    老师你好,最学习了你的专栏,准备优化一下项目,用一个第三方开源工具检测了一下,发现项目有大量的“主线程阻塞超过70ms”,请问主线程执行耗时操作,多久才算耗时,该如何定义?

    作者回复: 每一帧的时间是16.6ms,看你们的忍耐程度。不过前期可以把这个时间放大一些,例如两秒,三秒。因为如果间隔太小,前期会有非常多报出来,还是先解决比较严重的问题

    
     1
  • 冬
    2019-01-11
    有个问题请教 用empty message 去检查卡顿 ,比如1s 没消费 ,就能说message 卡顿1s 吗 ? 如果空消息前边有几个消息 比如3个 ,现在正在执行第三个 我觉得也正常啊 不能说明卡顿啊

    作者回复: 我们会把监控消息插入到message的头部,当然也是有可能会出现误报,但是从大数据来说问题不大

    
     1
  • 小美
    2018-12-13
    Nanoscope 是什么 方便老师说下吗

    作者回复: nanoscope 是 uber 开发的一套 Low overhead trace 工具 https://github.com/uber/nanoscope

    
     1
  • Kenny
    2018-12-13
    张老师,刚试了你给的Sample,plthook实现的自定义ftrace,B与E事件日志不成对?这个怎么看每一个事件的耗时?每个B找最近的E作为截止算时间吗?还是按照一个B对应一个E去算?还有一个问题就是课程提到通过hook thread_create去监控线程,这个是指监控应用的线程吗?如果是的话,那系统的线程比如binder,jit等如何去监控?话说这个张老师能把hook 线程创建的实现也放Sample?

    作者回复: 事件是最近匹配

    线程hook那个很简单的,我下次放到sample里面

    
     1
  • Jerry银银
    2020-02-10
    研究半天,竟然忘记了看Matrix库中的的wiki。在其中发现了一篇关于卡顿检测的文章,质量挺高,曾发布于WeMobileDev公众号中,文章地址:https://github.com/Tencent/matrix/wiki/Matrix-Android-TraceCanary。
    
    
  • Jerry银银
    2020-02-09
    看到Matrix库,TracerCanary模块中,这样一段核心代码:
    class LooperPrinter implements Printer {
            public Printer origin;
            boolean isHasChecked = false;
            boolean isValid = false;

            LooperPrinter(Printer printer) {
                this.origin = printer;
            }

            @Override
            public void println(String x) {
                if (null != origin) {
                    origin.println(x);
                    if (origin == this) {
                        throw new RuntimeException(TAG + " origin == this");
                    }
                }

                if (!isHasChecked) {
                    isValid = x.charAt(0) == '>' || x.charAt(0) == '<';
                    isHasChecked = true;
                    if (!isValid) {
                        MatrixLog.e(TAG, "[println] Printer is inValid! x:%s", x);
                    }
                }

                if (isValid) {
                    dispatch(x.charAt(0) == '>', x);
                }

            }
        }
    展开
    
    
  • Jerry银银
    2020-02-08
    老师,我知道,监控卡顿还有一种方法,就是:利用Choreographer.FrameCallback监控卡顿,而且还能计算fps。这种方法,要求Android 4.1(api 16以及以上),是因为对于系统版本有要求,才不推荐这种方法吗?

    
    
  • 薯条
    2019-09-22
    卡顿监控:1.帧率 2.Activity,Fragment 这些类的onCreate等相关的启动完成结束时间 3.线程数目。
    卡顿优化 线程数目遇到过:一个项目中启动了几百个线程,大多数睡眠。少数运行的thread 可以通过profile找出来。用线程池代替传统的线程运行。。今天主要是学习到了 ,帧率,没想到大厂还可以这样玩。。。难怪我开发的app 总是没得微信流畅,平滑,原来问题在这,哈哈哈哈
    
    
我们在线,来聊聊吧