APP启动应用优化加速和卡顿

一:应用启动类型

  1. 1冷启动

应用自启动后,或系统终止应用后的首次启动

  1. 2暖启动

如:应用退出应用,又重新启动,程序可能已经运行,但需要重新创建acitivity。或者进程被系统杀死,但是在activity的oncreate时有savedInstanceState

  1. 3热启动

应用的acitvity还留在内存中,系统只需将activity带到前台

在冷启动中,应用从头开始启动。我们始终在假定冷启动的基础上进行优化。这样做也可以提升暖启动和热启动的性能。

二:启动流程分析

2.1 分析1

在冷启动开始前,系统有三个任务

  1. 加载并开始启动应用。(System-Fixed)
  2. 在启动后立即显示应用的空白启动窗口(可控),用户看到的第一个窗口(可能:透明,空白,应用主题)
  3. 创建应用进程(可控)
  1. 创建应用对象
  2. 创建主activity
  3. 走生命周期渲染界面

2.2 分析2-启动窗口的显示

对启动窗口的操作,并不会影响应用的启动速度,只是在用户交互体验上的改进;关闭启动窗口,在主题属性设置<item name = “android:windowDisablePreview”>true</item>,这样可以解决耗时应用启动白屏问题,但是可能会导致应用响应慢的问题;设置windowBackGroud主题属性<item name = “android.windowBackground”>@drawable/welcom_launch_bg</item>,让一张图片作为窗口的背景,使打开MainActivity第一眼看到的界面是一张图片而不是白屏或者黑屏。设置这个属性来显示一张背景图,还有一个效果就是启动应用程序会感觉非常快。

2.3 分析3-创建应用进程

2.4 系统和应用

在创建应用和创建Activity的过程中可能会出现性能问题。

  1. 当应用启动时,空白启动窗口将保留在屏幕上,直到系统首次完成应用绘制。完成后,系统进程会替换掉应用的启动窗口,允许用户开始与应用互动。
  2. Application创建完成后(涉及Application.oncreate的调用),进程开始根据应用生命周期阶段继续运行。
  3. PS:ContentProvider会影响应用启动,注意在onCreate里的任务代码

三:启动耗时检测

    1. UI显示检测
  1. 看ActivityManager的日志(日志过滤)
  1. Adb shell am start -S -W com.king.reading/.module.MainActivity

四:启动耗时分析

  1. 检测耗时任务

a.工具:使用Android Studio自带的CPU Profiler,可以按线程记录方法调用的耗时

b.CPU Profiler可以抓取正在运行进程的数据,如果需要抓取应用进程首次启动需要特殊处理

五:启动加速方法

  1. 定制初始化

对于多进程应用,如果应用又集成Application,那么oncreate方法会执行多次,针对不同进程业务,可以做业务定制的初始化。

尽量避免大量的全局静态对象,在需要的时候才创建单例,加速进程启动速度

  1. 异步延迟加载

不在主线程做耗时任务,如:文件操作、网络请求等,耗时任务尽量在异步线程处理

使用线程池,减少线程开销,防止多线程抢占CPU,避免UI线程时间片变短

  1. 系统API使用&优化布局

部分系统的API使用是阻塞性的,文件很小可能无法感知,当文件过大,或者使用频繁时,可能造成阻塞,例如SharedPreference.Editor提交操作、AssetManager.open操作

布局的复杂程度,直接影响绘制的时间,减少布局层次,无用资源使用ViewStub,使用时加载

  1. 任务顺序安排

通过对任务做一个顺序调整,提高CPU的使用效率,例如:不重要的Service,或其他不需要的初始化任务,延后初始化(Service是在主线程执行的)

  1. 将耗时的,但是没有依赖的任务提前执行,缩短启动整体耗时

六:卡顿

  1. 屏幕刷新机制1

  1. CPU负责将数据计算出来,GPU负责将界面绘制到缓冲区,Display负责将缓冲区数据展示出来
  2. Display每秒60帧,约16.6ms一帧,按这个频率取数据展示,同时通知CPU去准备下一页页面
  1. 屏幕刷新机制2

  1. CPU由程序的主线程控制。在收到刷新请求时,调用performTraversals里来安排一次遍历绘制View树的任务
  2. 同步屏障机制:我们代码发的是同步消息,界面刷新消息是异步消息,当有异步消息时,会优选执行

七:卡顿-原因

没有及时响应完view树绘制请求

  1. 在收到刷新请求后,主线程在处理的消息耗时严重
  2. 由于界面布局复杂,或无用重复计算,使即使无法完成界面数据计算
  3. 主线程的执行时间片太短
  4. 底层渲染不及时

7.1卡顿分析1

使用CPU Profiler的trace System Calls

7.2卡段分析2

使用systrace;用pythons执行Android/Sdk/platform-tools/systrace;分析UI性能,具体定位问题,还需进一步去加trace代码定位

八:卡顿加速

  1. 避免在主线程执行耗时操作(包含网络、文件读取、读取系统文件路径,特别是在recycler列表中),非刷新界面消息,不用主线程handler,避免增加主线程任务,同时可以加速消息处理速度。
  2. 优化界面布局,减少view的计算数量和重复计算次数,ListView复用item布局
  3. 多采用ConstraintLayout,使布局设计偏平化,减少嵌套
  4. 避免使用过大资源进行显示(头像使用高清图片等),避免渲染问题
  5. 避免开启过多的线程,导致主线程的时间片过短
  6. 当批量数据需要显示或修改,保证需要刷新界面的数据尽可能少

APP启动应用优化加速和卡顿相关推荐

  1. Win10最详细优化设置告别卡顿

    Win10专业版怎么优化最流畅?Win10目前的用户已经非常多了,这个系统如果你会优化的话,会大大提升系统的运行速度,让你的电脑告别卡顿,流畅运行,以下小编就给大家带来Win10最详细优化设置. Wi ...

  2. c# 多线程界面卡顿_优化electron客户端卡顿的几种方案

    背景 公司需要做一个同步盘的客户端,框架技术选型方面使用了支持跨平台的Electron框架,其中一些核心功能就是文件的上传,和下载,考虑到node操作文件比较方便,起初把文件的下载上传操作放到主进程, ...

  3. 优化electron客户端卡顿的几种方案

    背景 公司需要做一个同步盘的客户端,框架技术选型方面使用了支持跨平台的Electron框架,其中一些核心功能就是文件的上传,和下载,考虑到node操作文件比较方便,起初把文件的下载上传操作放到主进程, ...

  4. 【凯子哥带你学Android】Andriod性能优化之列表卡顿——以“简书”APP为例

    这几天闲得无聊,就打开手机上的开发者模式里面的"GPU过度绘制"功能,看看别家的App做的咋样,然后很偶然的打开了"简书",然后就被它的过度绘制惊呆了,于是写了 ...

  5. Android 性能监测工具,优化内存、卡顿、耗电、APK的方法

    导语     安卓大军浩浩荡荡,发展已近十个年头,技术优化月新日异,如今 Android 9.0 代号P  都发布了,Android系统性能已经非常流畅了.但是,到了各大厂商手里,改源码自定系统,使得 ...

  6. win10进程太多怎么优化_游戏卡顿却不想升级硬件,Win10免费的超频模式你用过吗...

    原标题:游戏卡顿却不想升级硬件,Win10免费的超频模式你用过吗 游戏卡顿必须要升级硬件吗?很多时候其实玩家并没有真正将PC整机性能发挥出来,除了硬件超频设置之外,小伙伴们知道Win系统也有提供&qu ...

  7. android db加载后无法读取任何内容_android性能优化(二)之卡顿优化

    相对于其他类型的性能指标,卡顿是能直接让用户产生视觉反馈的现象,比如App反应滞后于用户的操作,在严重的情况下会出现ANR.关乎用户体验的大事,是很容易遭到用户吐槽的.因此,开发人员平时写代码时必须要 ...

  8. w10服务器优化,Win10专业版怎么优化最流畅?Win10最详细优化设置告别卡顿!

    Win10专业版怎么优化最流畅?Win10目前的用户已经非常多了,这个系统如果你会优化的话,会大大提升系统的运行速度,让你的电脑告别卡顿,流畅运行,以下小编就给大家带来Win10最详细优化设置. Wi ...

  9. react-native 性能优化,处理卡顿

    使用React Native的一个重要原因就是达到60FPS的刷新,这看起来跟本地APP是一样的.在可能的情况下,我们尽量完善ReactNative的性能,使你只关注APP的逻辑,而可以不用管性能的优 ...

最新文章

  1. 三方登录(微博为例)
  2. 把strassen乘法调出来了...
  3. SAP CRM 订单抬头文本的可编辑性讨论
  4. 一道简单却易混淆的高等数学求极限题目
  5. 【生活】我的2019年度总结
  6. CeBIT 2017热点:从5G到AI和物联网
  7. 【Oracle学习】archivelog
  8. 【2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) D】Count The Bits【数位DP】
  9. Datawhale 202210 Excel | 第五、六、七章 Excel函数示例 Excel函数列表
  10. SpringBoot项目实现qq邮箱验证码登录
  11. 球员岁月齐祖辉煌,执教生涯尤胜当年
  12. Vue3警告:[Vue warn] Extraneous non-emits event listeners (changeParentProps) were passed to component
  13. 用C语言做一个简单的原神抽卡小游戏
  14. vmware虚拟机 配置动态 静态 固态IP 三种模式: 桥接模式 nat模式和仅主机模式 Host-only模式
  15. iOS中 @synthesize 和 @dynamic 区别
  16. ES插入date类型数据报错failed to parse field [case_date] of type [date]
  17. 查看微信中撤回的图片(RIO)
  18. 计算机图形学原理及实践学习笔记第一章
  19. 【数据结构】——顺序表介绍(独家介绍,小白必看!!)
  20. [深度][PyTorch] DDP系列第三篇:实战与技巧

热门文章

  1. python 的sort()函数详解
  2. 如何下载腾讯课堂的视频?
  3. 新能源发电系统家用储能防逆流监测电表
  4. 关于窗口状态变化(显示、关闭、最小化、最大化等)的快捷键
  5. 课程设计是计算机科学与技术专业的一门,信息系:对“计算机科学与技术”专业课程设计的改善建议(已回复).doc...
  6. mastercam安装包下载 mastercam2020正式版下载 纯净版
  7. xp下净网先锋的清除 (http://www.dsdz.net/game/bbs/dispbbs.asp?boardid=10id=702)
  8. 【事件相机与计算机视觉】论文分享--Event-based Vision meets Deep Learning on Steering Prediction for Self-driving Car
  9. 【NYOJ】题目7街区最短路径
  10. BIND子域授权及正向解析实现