| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> app卡顿分析 -> 正文阅读 |
|
[移动开发]app卡顿分析 |
用户对卡顿的感知,主要来源于界面的刷新,而界面的性能主要是依赖于设备的UI渲染性能,如果我们的UI设计过于复杂,或是实现不够好,设备又不给力,界面就会像卡住了一样,给用户卡顿的感觉。 systrace是分析Android性能问题的神器,Google IO 2017上更是对其各种强推,是分析卡顿掉帧问题的核心工具,只要能提供卡顿现场,systrace就能很好定位问题。 Android SDK自带systrace的python脚本,存放路径为: androidSDK\platform-tools\systrace adb命令包含在Android SDK中,这里通过安装 Android Studio,来安装Android SDK。 安装后,启动 Android Studio,下载 SDK(需要一定的时间)。 SDK下载完成后,在环境变量Path中添加adb命令路径。C:\Users\***\AppData\Local\Android\Sdk\platform-tools 在命令行界面输入adb version出现如下界面,说明adb配置成功 ? systrace只支持python2.7,不支持python3,从systrace.py脚本中可以看到有此判断 安装完成后,在环境变量Path中添加python安装路径 在命令行界面输入python -V出现如下界面,说明python安装成功(注意:-V,V大写) 在环境变量Path中添加pip命令路径。 D:\Python27\Scripts 安装 win32con,使用命令:pip install pypiwin32 安装 six,使用命令:?pip install six 除了android自带的模拟器,还可以选择第三方模拟器,如mumu模拟器、夜神模拟器,这里以mumu模拟器为例。 安装完成后,在命令行界面输入adb connect 127.0.0.1:7555、adb devices,出现如下界面,说明模拟器连接成功 连接设备的时候,可以选择android自带模拟器、mumu模拟器、真机。 这里以真机为例:
要想分析卡顿现场,必须先获取到卡顿现场的systrace文件,本文通过python脚本的方式获取systrace文件。 命令:python C:\Users\***\AppData\Local\Android\Sdk\platform-tools\systrace\systrace.py -t 30 -o D:\testresult\mytrace.html 命令解析: “C:\Users\***\AppData\Local\Android\Sdk\platform-tools\systrace”是Android SDK自带的脚本路径 -t: 抓取systrace的时间长度,30秒 -o: 指定文件输出位置和文件名 输入命令以后,按回车,然后操作设备,重现现卡顿现场 命令执行完毕,会在D:\testresult\mytrace.html生成html格式的结果文件。 使用chrome浏览器(其他浏览器很可能打不开),打开上述步骤中生成的html文件,正常情况下会看到如下图所示界面 ? python systrace.py [options] [category1 [category2 ...]] [options] 是一些命令参数,[category] 是你想要trace的系统模块,比如view代表view系统(包含绘制流程),am代表ActivityManager(包含Activity创建过程等),分析不同问题时,可以选择不同的模块。 需要注意的是,尽可能缩小需要trace的模块,其一是数据量小易于分析;其二,虽然systrace本身开销很小,但是缩小需要trace的模块也能减少运行时开销。比如你分析卡顿的时候,power, webview 就几乎是无用的。 如果不指定任何类别或选项,systrace将生成包含所有可用类别的报告,并使用默认设置,可用的类别取决于使用的连接设备。
例1: 调用systrace在10秒钟内记录设备进程,包括图形进程,并生成一个名为mynewtrace的HTML报告: python systrace.py --time=10 -o mynewtrace.html gfx 例2: 检测UI性能: python systrace.py view --time=10 例3:显示所有支持的选项(取决于使用的连接设备) python systrace.py -l Systrace的文件结构从上到下一般是: 1、内核信息(CPU片信息); 2、surfaceflinger(底层绘制信号等信息); 3、system_server等其他进程信息。 横坐标是以时间为单位,纵坐标是以进程-线程的方式来划分,同一进程的线程为一组放在一起,可收缩或展开 ? ?Select mode: 双击已选定区能将所有相同的块高亮选中;(对应数字1) ?Pan mode: 拖动平移视图(对应数字2) ?Zoom mode:通过上/下拖动鼠标来实现放大/缩小功能;(对应数字3) ?Timing mode:拖动来创建或移除时间窗口线。(对应数字4) 可通过按数字1~4,切换鼠标模式;另外,按住alt键,再滚动鼠标滚轮能实现放大/缩小功能。 w: 放大,[+shift]速度更快 s: 缩小,[+shift]速度更快 a: 左移,[+shift]速度更快 d: 右移,[+shift]速度更快 f: 放大当前选定区域 m: 标记当前选定区域 v: 高亮VSync g: 切换是否显示60hz的网格线 0: 恢复trace到初始态,这里是数字0而非字母o h: 切换是否显示详情 /: 搜索关键字 enter: 显示搜索结果,可通过← →定位搜索结果 `: 显示/隐藏脚本控制台 ?: 显示帮助功能 在线程的上面有一条多色线条,代表了该线程的状态: 灰色: 睡眠 蓝色: 可以运行(它可以运行,但还未被调度运行) 绿色: 正在运行(调度程序认为它正在运行) 红色: 不间断的睡眠(通常发生在内核锁上), 指出I / O负载,对于性能问题的调试非常有用 橙色: 由于I / O负载导致的不间断睡眠 帧率是指每秒传输的帧数,每秒钟帧数越多,所显示的动作就会越流畅。一般来说安卓设备的屏幕刷新率为60帧/秒,要保持画面流畅不卡顿,要求每一帧的时间不超过1000/60=16.6ms,否则就会出现跳帧、画面卡顿。 在每个app进程,都有一个Frames行,正常情况以绿色的圆点表示。当圆点颜色为黄色或者红色时,意味着这一帧超过16.6ms,这时需要通过放大那一帧进一步分析问题。对于Android 5.0(API level 21)或者更高的设备,该问题主要聚焦在UI Thread和Render?Thread这两个线程当中,对于更早的版本,所有工作在UI Thread。 点击一个绿色的帧点,按m键,可以看到这一帧的时间是10.831ms 再点击一个红色的帧,按m键,可以看到这一帧的时间达到了52.709ms 按w键放大,在帧点下方可以看到具体的任务内容和占用时长 点击F,会在下栏显示相关内容 单击窗口最右侧的Alerts选项卡,可以查看工具在trace中发现的每个Alert以及设备触发Alert的次数。 选中Alert,左侧页面会同时选中发生Alert的帧 画面向上拉到最开头的Alerts区域,会看到相应的Alert也被选中 执行systrace.py脚本时,遇到ImportError: No module named win32con报错 安装 win32con,使用命令:pip install pypiwin32 执行systrace.py脚本时,遇到ImportError: No module named six报错 安装 six,使用命令:?pip install six 在环境变量Path中添加pip命令路径。 D:\Python27\Scripts 执行systrace.py脚本时,遇到如下错误 进行操作时,使用的是模拟器,目前没有找到原因,替换真机进行systrace操作,可以成功。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 10:27:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |