一次Android加载优化分析

场景

一个他人开发的模块经测试反馈在数据量较多时加载速度很慢。

分析

  1. 检测接口返回
    在大数据量下接口也能迅速返回结果,排除后台问题
  2. 主代码分析
    简单分析主Activity文件未见明显问题。页面有列表,且在大数据量下问题明显,猜测listview问题。查看adpter view复用,果然未复用view,改之。然而并未明显改善问题。
  3. 将listview 的 item layout 优化,效果不明显
  4. 运行Android Profiler分析
    进入Android Profiler 选择CPU监测。点击开始监测按钮,对APP进行操作,结束监测。


    选择CPU.png

    开始监测.png
  5. 分析结果
    选择Android Profiler底部的Call Chat 分析函数执行时间。对系统 API 的函数调用显示为橙色,对应用自有函数的调用显示为绿色,对第三方 API(包括 Java 语言 API)的函数调用显示为蓝色。主要关注绿色部分(具体含义参考 cpu-profiler)。onMeasure执行太长时间。
结果分析.png

滚动鼠标滚轮放大,发现调用了N多 getView方法,远超过当前屏幕显示的item数量,可分析Listview并没有缓存复用之前的View


很多getView.png
  1. 总结原因
    分析代码,使用ScrollView 嵌套了自定义的Listview,Activity渲染的时候会将整个Listivew全部渲染,有多少项渲染多少个item view ,不慢才怪


    自定义Listview.png
  2. 改正
    CoordinatorLayout + AppBarLayout + RecyclerView
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,941评论 25 709
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,795评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,793评论 1 32
  • 你们有没有被坑过的经历?特别是你以为值得信任的人。 今天算是开始实习了吗?哦,难道主要就是发传单?我来错地方了吧!...
    两颗大芒果阅读 4,162评论 0 1
  • 先生告诫我,没有定力功底之前莫要学《易》,他说的《易》指的是儒家十三经之一的《易经》。 第一,先生教我,《易经》乃...
    任艾军阅读 2,713评论 0 0