Android应用性能优化实践

简介:


何杰:UC优视Android技术负责人,专注Android平台应用开发方向;主导过UC浏览器的性能、内存、稳定性、网络优化,增量升级技术攻关,插件平台搭建;目前负责Android UC浏览器的架构优化。

Android应用的卡顿问题非常突出,所有用户都能感觉得到却又很难做量化卡顿的严重程度,过去的做法只是零星地发现和解决一些小点。DAU超亿级的 UC浏览器在卡顿优化的过程中建立了一套衡量卡顿严重性的数据指标与监控分析机制,并藉此有针对性地落实了200+个性能优化点。下面会介绍卡顿监控与分析的方法、常见的卡顿案例与原因。以下分享精彩内容。

背景 -- Android应用卡顿产生原因

安卓系统低效—安卓没有自己独立的渲染线程、同步接口、广播机制;

运行环境恶劣—后台进程可能几十甚至上百个同时跑、安全软件给性能带来一些挑战;

低端机占比高—低内存、弱GPU、IO瓶颈;

产品考虑不足—功能定义简陋,不一定会把整个闭环想的很清楚,功能堆积严重;

技术考虑不足。

问题—用户反馈应用卡顿,怎么办?

 复现难—用户描述模糊、不稳定出现,复现问题难。

定位难—不同机型、固件、系统状态表现不一,不确定性非常大,程序细节多、可疑面广。

衡量难—卡顿严重程度难以量化,无法掌握优化度,卡顿问题不便分类。

思路

卡 vs 顿,卡为主,顿为辅。卡和顿没有一个明显的界限,大部分顿的问题当环境足够恶劣时就会表现为卡。所以抓住卡,就能解决很多问题。

打点统计 vs 全局监控:对于上百万的代码来说,做全局监控是很难的,所以我们定了一个短期目标:主路径性能保障,打点统计;一个长期目标:整体的卡顿优化,全局监控。

线下分析 vs 线上监控:线下分析:实验室调试去复现一个问题,精确定位、粒度细;线上监控:指标衡量、粒度粗。

方案

工具应用:TraceView,StrictMode,Systrace,Overdraw。只能做调试用,无法去做一个更全面的分析和监控。

打点统计:

  耗时(针对我们的主路径,启动速度,退出速度,转页时间,多窗口的滑屏时间,启动时间、响应速度)。

  多窗口的滑屏帧率。

全局监控:做卡顿优化新的思路。

  用户反馈分析

  Anr日志分析

  Strict Anr

  Looper Hook

全局监控 -- 用户反馈

用户反馈分析,用户反馈是一个非常好的渠道。

  预警机制

  用户分类

  功能分类

  纵向对比

 图1

针对用户反馈进行很多方面的筛选,资讯类的,网页类的,性能相关的等所有信息进行一个整合,会有对应的负责人专门负责,比如像性能方面的用户反馈如图1,全部集于一个邮件发过来,我们会去关注,发现规律,通过用户的分类对手机的各个参数作聚合,也对业务各个模块反馈卡顿的占比是什么样的,指标高的对我们就是一个预警。

全局监控—anr日志分析

Anr信息很全,有所有线程的调用站,我们肯定能够知道当前主线程式卡在哪里,会有精确的定位,数据量化,把实验室的研究方式拿到线上来。

 图2 anr日志分析

全局监控 -- Strict Anr

 方案说明

  vs Anr (主线程超时,5s -> 1s)

  暴露更多问题

  精确定位问题

  方便用户联调

 图3 Strict Anr日志分析

所有的调用栈去写一个脚本,全部用图形化的方式展现出来,显示各个帧的占比,再去做一个分析,针对性的解决问题。

全局监控 -- Looper Hook

方案说明

  监控系统消息循环

  计算消息耗时

  定位耗时点(msg.what or msg.callback)

 

图4Andriod的消息循环

 图5耗时点分析

从图5看,发现卡顿点就能知道handler是谁,如果是一个message,可以知道message的ID是多少,这样我们就能准确的精确度我们自己代码的一个代码段。

 

 图6

从图6数据上看,红色和蓝色一个是2s的卡顿率,一个是1s的卡顿率,我们在灰度的版本上去搜所有的消息循环里耗时超过2s和1s的数据,把数据整理下,每天的卡顿的用户数除以UC每天的日活数,得到每天有多少用户是在卡顿这样一个卡顿率的指标,进行优化。

 

技术成果 -- 问题回顾

200+项技术优化

举例说明

  下载界面展开卡顿(分段加载)

  二维码界面展现慢(延迟加载,先出界面,再初始化相机)

  文件管理转屏卡顿(缓存复用,缓存View,转屏只重布局)

  启动完成后操作卡(线程抢占,低优先级后台线程+队列)

  视频播放控制卡顿(API兼容,异步化)

  获取网络代理卡顿(IPC异常,异步DNS+缓存)

  从第三方返回卡死(固件问题,Shield Activity)

  网页滑屏操作卡顿(GPU加速)

  So加载/Jni注册卡(异步加载+时序控制)

  SharedPreference(主线程IO,commit -> apply)

  安全软件事件拦截(沟通反馈。。。)

  ...

 

经验推广

    禁止:

  主线程文件IO(标记文件读除外)

  主线程耗CPU操作

  主线程同步IPC调用

推荐:

  异步化:产品及程序设计,预加载 + 闲时加载 + 按需加载

  线程管理:线程数限制 + 任务队列,非主线程优先级调低

  压力测试

  防御式编程

  主路径自动化数据监控

  全局性能监控

延伸:

精确化 & 自动化:用户反馈,卡顿日志

新监控方案:Api Hook

新优化方向:卡顿率 -> 帧率,低端机优化

 

                                                                                                                      PPT下载地址:http://club.alibabatech.org/resource_detail.htm?topicId=181

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
10月前
|
存储 Android开发
如何查看Flutter应用在Android设备上已被撤销的权限?
如何查看Flutter应用在Android设备上已被撤销的权限?
504 64
|
4月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
535 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
5月前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
205 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
5月前
|
存储 消息中间件 人工智能
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
421 10
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
|
11月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
3142 77
|
9月前
|
缓存 编解码 Android开发
Android内存优化之图片优化
本文主要探讨Android开发中的图片优化问题,包括图片优化的重要性、OOM错误的成因及解决方法、Android支持的图片格式及其特点。同时介绍了图片储存优化的三种方式:尺寸优化、质量压缩和内存重用,并详细讲解了相关的实现方法与属性。此外,还分析了图片加载优化策略,如异步加载、缓存机制、懒加载等,并结合多级缓存流程提升性能。最后对比了几大主流图片加载框架(Universal ImageLoader、Picasso、Glide、Fresco)的特点与适用场景,重点推荐Fresco在处理大图、动图时的优异表现。这些内容为开发者提供了全面的图片优化解决方案。
379 1
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
399 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
缓存 Android开发 数据格式
Android ListView性能优化,异步加载图片
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/48184383 ListView性能优...
1274 0
|
缓存 算法 Android开发
Android 性能优化——之图片的优化
Android 性能优化——之图片的优化  在Android性能优化中,我们会发现占内存最大的和对性能影响最大的往往是图片资源,其次是控件资源。相对来说,其他的资源的影响会小一点。这里我就先对图片资源的优化进行一下讲解,如果有什么说的不对的,希望大神指正一下。
1234 0

热门文章

最新文章