原文出处:http://hukai.me/android-performance-patterns-season-6/

序言

这是Android性能优化典范第6季的课程学习笔记,最近个人事情比较多,从被@起,这篇学习笔记就一直被惦记着,现在学习记录分享一下,请多多包涵担待指正!这次才一共6个段落,涉及的内容主要有:程序启动时间相关的三个方面:activity的创建过程,臃肿的application启动对象,主题启动显屏。另外还介绍了减少安装包大小的checklist以及如何使用VectorDrawable来减少安装包的大小。

系列阅读

Android性能优化典范(一):主要从Android的渲染机制、内存与GC、电量优化三个方面展开,介绍了Android中性能问题的底层工作原理,以及如何通过工具来找出性能问题及提升性能的建议。

Android性能优化典范(二):20个短视频,主要内容为:电量优化、网络优化、Android Wear上如何做优化、使用对象池来提高效率、LRU Cache、Bitmap的缩放、缓存、重用、PNG压缩、自定义View的性能、提升设置alpha之后View的渲染性能,以及Lint、StictMode等工具的使用技巧。

Android性能优化典范(三):更高效的ArrayMap容器,使用Android系统提供的特殊容器来避免自动装箱,避免使用枚举类型,注意onLowMemory与onTrimMemory的回调,避免内存泄漏,高效的位置更新操作,重复layout操作的性能影响,以及使用Batching,Prefetching优化网络请求,压缩传输数据等使用技巧。

Android性能优化典范(四):优化网络请求的行为,优化安装包的资源文件,优化数据传输的效率,性能优化的几大基础原理等。

Android性能优化典范(五):多线程并发的性能问题,介绍了AsyncTask,HandlerThread,IntentService与ThreadPool分别适合的使用场景以及各自的使用注意事项,这是一篇了解Android多线程编程不可多得的基础文章,清楚的了解这些Android系统提供的多线程基础组件之间的差异以及优缺点,才能够在项目实战中做出最恰当的选择

App Launch time 101

提高程序的启动速度意义重大,很显然,启动时间越短,用户才越有耐心等待打开这个APP进行使用,反之启动时间越长,用户则越有可能来不及等到APP打开就已经切换到其他APP了。程序启动过程中的那些复杂错误的操作很可能导致严重的性能问题。Android系统会根据用户的操作行为调整程序的显示策略,用来提高程序的显示性能。例如,一旦用户点击桌面图标,Android系统会立即显示一个启动窗口,这个窗口会一直保持显示直到画面中的元素成功加载并绘制完第一帧。这种行为常见于程序的冷启动,或者程序的热启动场景(程序从后台被唤起或者从其他APP界面切换回来)。那么关键的问题是,用户很可能会因为从启动窗口到显示画面的过程耗时过长而感到厌烦,从而导致用户没有来得及等程序启动完毕就切换到其他APP了。更严重的是,如果启动时间过长,可能导致程序出现ANR。我们应该避免出现这两种糟糕的情况。

从技术角度来说,当用户点击桌面图标开始,系统会立即为这个APP创建独立的专属进程,然后显示启动窗口,直到APP在自己的进程里面完成了程序的创建以及主线程完成了Activity的初始化显示操作,再然后系统进程就会把启动窗口替换成APP的显示窗口。

上述流程里面的绝大多数步骤都是由系统控制的,一般来说不会出现什么问题,可是对于启动速度,我们能够控制并且需要特别关注的地方主要有三处:

  • Activity的onCreate流程,特别是UI的布局与渲染操作,如果布局过于复杂很可能导致严重的启动性能问题。
  • Application的onCreate流程,对于大型的APP来说,通常会在这里做大量的通用组件的初始化操作。
  • 目前有部分APP会提供自定义的启动窗口,这里可以做成品牌宣传界面或者是给用户提供一种程序已经启动的视觉效果。

在正式着手解决问题之前,我们需要掌握一套正确测量评估启动性能的方法。所幸的是,Android系统有提供一些工具来帮助我们定位问题。

1、首先是display time:从Android KitKat版本开始,Logcat中会输出从程序启动到某个Activity显示到画面上所花费的时间。这个方法比较适合测量程序的启动时间。

2、其次是reportFullyDrawn方法:我们通常来说会使用异步懒加载的方式来提升程序画面的显示速度,这通常会导致的一个问题是,程序画面已经显示,可是内容却还在加载中。为了衡量这些异步加载资源所耗费的时间,我们可以在异步加载完毕之后调用activity.reportFullyDrawn()方法来告诉系统此时的状态,以便获取整个加载的耗时。

3、然后是Method Tracing:前面两个方法提供了启动耗时的总时间,可是却无法提供具体的耗时细节。为了获取具体的耗时分布情况,我们可以使用Method Tracing工具来进行详细的测量。

4、最后是Systrace:我们可以在onCreate方法里面添加trace方法来声明需要跟踪的起止位置,系统会帮忙统计中间经历过的函数调用耗时,并输出报表。

Android性能优化典范 - 第6季相关推荐

  1. Android性能优化典范 - 第2季

    Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitmap的 ...

  2. Android 系统性能优化(15)---Android性能优化典范 - 第3季

    Android性能优化典范的课程最近更新到第三季了,这次一共12个短视频课程,包括的内容大致有:更高效的ArrayMap容器,使用Android系统提供的特殊容器来避免自动装箱,避免使用枚举类型,注意 ...

  3. Android 系统性能优化(14)---Android性能优化典范 - 第2季

    1)Battery Drain and Networking 对于手机程序,网络操作相对来说是比较耗电的行为.优化网络操作能够显著节约电量的消耗.在性能优化第1季里面有提到过,手机硬件的各个模块的耗电 ...

  4. Android性能优化典范 - 第1季(番外:渲染)

    2019独角兽企业重金招聘Python工程师标准>>> Google近期在Udacity上发布了Android性能优化的在线课程,分别从渲染,运算与内存,电量几个方面介绍了如何去优化 ...

  5. Android性能优化典范第六季

    原文链接:http://hukai.me/android-performance-patterns-season-6/ 前言 本季内容大致有:程序启动时间性能优化的三个方面:优化activity的创建 ...

  6. Android性能优化典范第五季

    原文链接:http://hukai.me/android-performance-patterns-season-5/ 前言 本季内容大致有:多线程并发的性能问题,介绍了AsyncTask,Handl ...

  7. android系统性能优化(13)---Android性能优化典范 - 第1季

    0)Render Performance 大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能.从设计师的角度,他们希望App能够有更多的动画,图片等时尚元素来实现流畅的用户体验.但是Andr ...

  8. Android性能优化典范(五)

    作者简介: 胡凯(@胡凯me),腾讯Android工程师,热爱开源与分享,维护Android官方培训课程协作项目,关注Android应用性能优化的总结与分享,推崇Android官方最佳实践.个人博客: ...

  9. Android性能优化典范(二)

    转自: http://www.csdn.net/article/2015-04-29/2824583-android-performance-patterns-season-2/1 摘要:Google ...

最新文章

  1. c语言中gets函数可以输入空格吗_C语言中printf和gets函数的实用技巧
  2. PMP-【第2章 项目运行环境与项目经理】2021-1-4(49页-60页)
  3. 我建议你了解一点儿Serverless
  4. Android 图文混排 通过webview实现并实现点击图片
  5. 使用LiveClick升级您的实时书签
  6. 单细胞转录组基本概念(一)
  7. HoloLens 2开发:电脑端PC识别Vuforia
  8. 中指北针怎么画_木工图纸怎么快速看懂?助你看懂施工图的9个技巧
  9. java 弹框_java弹框
  10. Python学习手册-笔记2
  11. Window下MySQL 8.0重新设置密码
  12. 生活游记——泰国自由行
  13. PTA数据结构7.1给定一个初始为空的栈和一系列压栈、弹栈操作,请编写程序输出每次弹栈的元素。栈的元素值均为整数。
  14. Idear集成maven环境
  15. 模块一:深度学习入门算法
  16. oracle数据库中批量把一张表里面的数据插入到不同的表中的方法
  17. Office-页码全为0的原因及解决方法
  18. 苹果 M1芯片运行Android模拟器
  19. destoon7.0第三方短信插件下载 destoon7.0整合云信通短信平台教程
  20. 23种模式的比喻启发

热门文章

  1. MOSS推荐之1-WSS V3服务器架构
  2. redis、memcache、mongoDB有哪些区别?
  3. SD-WAN部署如何使用最后一英里连接?
  4. 如何防御潜在的破坏性DDoS攻击—Vecloud微云
  5. Django 07模型层—单表操作(增删改查)
  6. 微信小程序开发——小程序API获取用户位置及异常流处理完整示例
  7. 禁用Browser Link
  8. [YTU]_2625( 构造函数和析构函数)
  9. 令人作呕的OpenSSL
  10. 达摩院成立XG实验室 阿里官宣进军5G