文章目录

  • 一、 界面启动时间
  • 二、 启动优化项目
  • 三、 方法追踪

一、 界面启动时间


在 【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 )相关推荐

  1. 【Android 性能优化】应用启动优化 ( 阶段总结 | Trace 文件分析及解决方案 | 源码分析梳理 | 设置主题的方案总结 ) ★

    文章目录 一. 常用的耗时方法优化方案 ( 重要 ) 二. 源码分析梳理 1. 应用启动时间计算相关源码分析 2. Launcher 应用中启动 Android 应用流程 三. 启动白屏解决方案 An ...

  2. android性能调优的工具,神兵利器-Android 性能调优工具 Hugo

    在进行Android性能调优.减少应用卡顿时,寻找可优化的code是一个必要的过程.如何发现应用中的耗时任务甚至是耗时函数呢,如果可以在log中打印每个方法的执行时间,甚至把执行方法时的输入输出同时打 ...

  3. 【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用启用普通安卓应用 | 应用进程分析 )

    文章目录 一. Launcher 应用 startActivitySafely 方法分析 二. Launcher 中的 startActivity(View v, Intent intent, Obj ...

  4. Android性能优化-App启动优化

    原文地址:https://developer.android.com/topic/performance/launch-time.html#common 通常用户期望app响应和加载速度越快越好.一个 ...

  5. Android性能优化(一):APP启动优化

    Android性能优化(一):APP启动优化 性能优化系列文章: Android性能优化(一):APP启动优化 Android性能优化(二):UI布局优化 Android性能优化(三):响应优化 An ...

  6. Android 性能优化(一) —— 启动优化提升60%

    本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发. 转载请标明出处: https://blog.csdn.net/qian520ao/article/details/8190850 ...

  7. Android性能优化笔记(一)——启动优化

    本文主要是学习了极客时间张绍文老师的 Android开发高手课 以及 谷歌官网文章 的启动优化笔记~ 参考文章:  https://time.geekbang.org/column/article/7 ...

  8. Android性能优化系列:启动优化

    文章目录 1 应用启动类型 1.1 冷启动 1.2 温启动 1.3 热启动 2 查看启动耗时 2.1 adb命令查看 2.2 Logcat Displayed查看启动耗时 2.3 手动记录启动耗时 2 ...

  9. Android性能优化之启动加速

    Android性能优化之启动加速 http://blog.csdn.net/mybook1122/article/details/65029259 http://blog.csdn.net/myboo ...

最新文章

  1. c++中static_cast用法与uchar/char的区别
  2. JAVA代码实现下载单个文件,和下载打包文件
  3. excel中最常用的30个函数_最常用日期函数汇总excel函数大全收藏篇
  4. 关于System.Web.Caching的“未将对象引用设置到对象的实例”错误
  5. IT技术人终究要走上管理职位吗?
  6. iframe关闭当前窗口_iframe 、 a标签、input标签
  7. NMEA-0183通信协议
  8. XP中N8无法连接PC套件解决
  9. 51单片机学习笔记——OLED贪吃蛇
  10. Greedy search 和 beam search
  11. M1芯片下Fabric测试网络环境配置
  12. 蓝桥杯---二阶魔方旋转
  13. Win11系统开机黑屏无法显示桌面怎么解决?
  14. wxPython的基础教程
  15. 极部落TrueChain公链训练营_长沙站[湘链技术社区]
  16. note20220419
  17. VK2C22A/B 高抗干扰超声波医用段码LCD液晶屏驱动(IC)芯片(可定制DICE/COG)
  18. Java避免抢一个单_java死锁和避免死锁
  19. AI文档批量翻译软件,URL采集翻译发布
  20. ps不能完成命令因为暂存盘已满

热门文章

  1. VM虚拟机常见问题之五--网络相关的问题
  2. ASP.NET 网站路径[转载]
  3. SweetAlert2模态窗的使用
  4. sqlserver 查找数据混排
  5. javase基础回顾(三) 动态代理
  6. JLINK通过SW模式下载程序的方法
  7. 在Mac上安装Hadoop
  8. (转)软件开发人员如何提高自己的软件专业技术方面的具体建议
  9. angular父组件通过@ViewChild 主动获取子组 件的数据和方法
  10. MongoDB Sharding分片配置