【Android 性能优化】应用启动优化 ( 启动优化项目 | 界面启动时间 | 启动优化项目 | 方法追踪 MethodTracing )
文章目录
- 一、 界面启动时间
- 二、 启动优化项目
- 三、 方法追踪
一、 界面启动时间
在 【Android 性能优化】应用启动优化 ( 启动白屏问题 | 应用启动时间测量 | 冷启动 | 热启动 | 应用启动时间计算源码分析 ) __ 四、 APP 启动时间计算 博客中简要介绍了相关的启动时间 ;
下面是执行 adb shell am start -W 包名/完整 Activity 类名 命令 , 打印出的完整日志 ;
C:\Users\octop>adb shell am start -W kim.hsl.rtmp/kim.hsl.rtmp.MainActivity
Starting: Intent { act=android.intent.action.MAIN
cat=[android.intent.category.LAUNCHER] cmp=kim.hsl.rtmp/.MainActivity }
Status: ok
LaunchState: COLD
Activity: kim.hsl.rtmp/.MainActivity
TotalTime: 431
WaitTime: 433
CompleteC:\Users\octop>
2 . 相关的时间概念 :
① 应用启动开始时间 : startTime , 这是用户在 Launcher 应用中点击应用图标的时间 , 之后开启进行应用启动 , 该时间就是 Am.java 中记录的 startTime 开始时间 ;
IActivityManager.WaitResult result = null;
int res;// 记录开始时间
final long startTime = SystemClock.uptimeMillis();
if (mWaitOption) {// 启动 Activity result = mAm.startActivityAndWait(null, null, intent, mimeType,null, null, 0, mStartFlags, profilerInfo, null, mUserId);res = result.result;
} // 记录结束时间
final long endTime = SystemClock.uptimeMillis();
上述源码在 \frameworks\base\services\core\java\com\android\server\am\ActivityRecord.java
② 应用开始加载时间 : mLaunchStartTime , 这是 Application 开始加载的时间 ; 对应 ActivityRecord.java 中的 mLaunchStartTime 时间 ;
③ UI 绘制时间 : displayStartTime , 这是 Activity 开始绘制 UI 布局的时间 ; 对应 ActivityRecord.java 中的 displayStartTime 时间 ;
④ 启动结束时间 : endTime , 这是加载结束 , 界面显示完成的时间 ; 对应 ActivityRecord.java 中的 reportLaunchTimeLocked 方法的 curTime 参数时间 ;
private void reportLaunchTimeLocked(final long curTime) {final ActivityStack stack = task.stack;// 这里计算了 APP 启动时间final long thisTime = curTime - displayStartTime;final long totalTime = stack.mLaunchStartTime != 0? (curTime - stack.mLaunchStartTime) : thisTime;// 省略 1 万行代码displayStartTime = 0;stack.mLaunchStartTime = 0;}
上述源码在 \frameworks\base\services\core\java\com\android\server\am\ActivityRecord.java
3 . 时间之间的关系 :
① 应用加载时间 : TotalTime , 从 Application 开始加载 , 到界面显示完毕的时间 ; TotalTime = endTime - mLaunchStartTime ;
② 界面显示时间 : ThisTime , 从界面开始显示 , 到界面显示完毕的时间 ; ThisTime = endTime - displayStartTime ;
③ 用户等待时间 : WaitTime , 从用户点击应用图标开始 , 到应用显示完毕的时间 ; WaitTime = endTime - startTime ; 用户等待的时间是 startTime 到 endTime 的所有时间 ;
4 . TotalTime 与 ThisTime 显示时间关系 :
① 如果启动应用的第 111 个界面 , 即 Launch Activity 界面 , 那么 TotalTime = ThisTime ;
② 如果启动连续多个 Activity 界面 , 那么 TotalTime > ThisTime , 每个 Activity 都会有一个显示时间 , 所有的 Activity 的显示时间 ThisTime 相加等于 TotalTime 的时长 ;
二、 启动优化项目
在 Launcher 应用点击图标后 , 启动应用 , 系统为应用开启进程 , 分配内存的步骤是无法干预的 , 开发者能做启动优化的地方只有两个位置 , 一个是 Application 的 onCreate 方法 , 另一个是 Activity 的 onCreate 方法 ;
针对上述的启动时间 , 可优化的时间是 TotalTime , 和 ThisTime , 分别对应应用启动时间 , 和界面显示时间 ;
1 . Application 的 onCreate 方法 : 在应用的 Application 创建时 , 需要调用 Application 中的 onCreate 方法 , 这里面绝对不能有耗时操作 , 直接影响到 ActivityThread 中初始化 Application 步骤的消耗时间 ;
2 . Activity 的 onCreate 方法 : 显示第一个 Activity 界面时 , 不要在该 Activity 的 onCreate 方法中执行耗时操作 ;
3 . 首界面布局优化 : 一般在 Activity 界面中 , 需要加载 xml 布局文件 , 显示布局文件中的画面 , 布局文件层级不能太多 ;
三、 方法追踪
如果要优化性能 , 首先要知道当前性能是多少 , 使用什么手段 , 优化到什么程度 ; 这里就需要统计当前的应用性能 , 如应用启动每个阶段的耗时 ;
使用 Debug.startMethodTracing() 追踪分析方法执行情况 ;
// 将追踪信息存放到该文件中
File traceFile = new File(Environment.getExternalStorageDirectory(), "Method_Trace");
// 开启方法追踪
Debug.startMethodTracing(traceFile.getAbsolutePath());// TODO 要追踪的内容// 停止方法追踪
Debug.stopMethodTracing();
【Android 性能优化】应用启动优化 ( 启动优化项目 | 界面启动时间 | 启动优化项目 | 方法追踪 MethodTracing )相关推荐
- 【Android 性能优化】应用启动优化 ( 阶段总结 | Trace 文件分析及解决方案 | 源码分析梳理 | 设置主题的方案总结 ) ★
文章目录 一. 常用的耗时方法优化方案 ( 重要 ) 二. 源码分析梳理 1. 应用启动时间计算相关源码分析 2. Launcher 应用中启动 Android 应用流程 三. 启动白屏解决方案 An ...
- android性能调优的工具,神兵利器-Android 性能调优工具 Hugo
在进行Android性能调优.减少应用卡顿时,寻找可优化的code是一个必要的过程.如何发现应用中的耗时任务甚至是耗时函数呢,如果可以在log中打印每个方法的执行时间,甚至把执行方法时的输入输出同时打 ...
- 【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用启用普通安卓应用 | 应用进程分析 )
文章目录 一. Launcher 应用 startActivitySafely 方法分析 二. Launcher 中的 startActivity(View v, Intent intent, Obj ...
- Android性能优化-App启动优化
原文地址:https://developer.android.com/topic/performance/launch-time.html#common 通常用户期望app响应和加载速度越快越好.一个 ...
- Android性能优化(一):APP启动优化
Android性能优化(一):APP启动优化 性能优化系列文章: Android性能优化(一):APP启动优化 Android性能优化(二):UI布局优化 Android性能优化(三):响应优化 An ...
- Android 性能优化(一) —— 启动优化提升60%
本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发. 转载请标明出处: https://blog.csdn.net/qian520ao/article/details/8190850 ...
- Android性能优化笔记(一)——启动优化
本文主要是学习了极客时间张绍文老师的 Android开发高手课 以及 谷歌官网文章 的启动优化笔记~ 参考文章: https://time.geekbang.org/column/article/7 ...
- Android性能优化系列:启动优化
文章目录 1 应用启动类型 1.1 冷启动 1.2 温启动 1.3 热启动 2 查看启动耗时 2.1 adb命令查看 2.2 Logcat Displayed查看启动耗时 2.3 手动记录启动耗时 2 ...
- Android性能优化之启动加速
Android性能优化之启动加速 http://blog.csdn.net/mybook1122/article/details/65029259 http://blog.csdn.net/myboo ...
最新文章
- c++中static_cast用法与uchar/char的区别
- JAVA代码实现下载单个文件,和下载打包文件
- excel中最常用的30个函数_最常用日期函数汇总excel函数大全收藏篇
- 关于System.Web.Caching的“未将对象引用设置到对象的实例”错误
- IT技术人终究要走上管理职位吗?
- iframe关闭当前窗口_iframe 、 a标签、input标签
- NMEA-0183通信协议
- XP中N8无法连接PC套件解决
- 51单片机学习笔记——OLED贪吃蛇
- Greedy search 和 beam search
- M1芯片下Fabric测试网络环境配置
- 蓝桥杯---二阶魔方旋转
- Win11系统开机黑屏无法显示桌面怎么解决?
- wxPython的基础教程
- 极部落TrueChain公链训练营_长沙站[湘链技术社区]
- note20220419
- VK2C22A/B 高抗干扰超声波医用段码LCD液晶屏驱动(IC)芯片(可定制DICE/COG)
- Java避免抢一个单_java死锁和避免死锁
- AI文档批量翻译软件,URL采集翻译发布
- ps不能完成命令因为暂存盘已满