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

2023-03-27 21:43:46 浏览数 (1)

文章目录

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

Android 应用启动优化总结 :

1 . 查看应用启动时间 : 应用启动优化引入 ;

  • 【Android 性能优化】应用启动优化 ( 启动白屏问题 | 应用启动时间测量 | 冷启动 | 热启动 | 应用启动时间计算源码分析 )

2 . 启动白屏的解决方案 : 设置图片背景 , 或透明背景 , 这是个权宜之计 , 并不能根本性解决启动慢的问题 , 只是让用户体验效果好一些 ;

  • 【Android 性能优化】应用启动优化 ( 主题背景图片设置 | 设置透明主题背景 | 设置应用启动主题背景、启动后恢复主题 )

3 . 分析优化哪些项目 : 这三篇博客详细分析了从 Launcher 应用中启动第三方应用的整体流程 , 步骤 , 进而分析出应该优化哪些条目 ;

【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用简介 | Launcher 应用源码简介 | Launcher 应用快捷方式图标点击方法分析 )

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

【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | ActivityThread 主函数分析 | 应用初始化 | 启动优化项目 )

4 . 使用 Trace 分析每个方法的执行时间 : 使用方法跟踪 , 可以找出哪个方法耗时较长 , 需要优化 ;

  • 【Android 性能优化】应用启动优化 ( 启动优化项目 | 界面启动时间 | 启动优化项目 | 方法追踪 MethodTracing )
  • 【Android 性能优化】应用启动优化 ( 方法追踪代码模板 | 示例项目 | SD 卡访问权限 | 示例代码 | 获取 Trace 文件 | Android Studio 查看文件)
  • 【Android 性能优化】应用启动优化 ( Trace 文件分析 | 结合代码分析 Trace 文件 )

相关文件下载 :

  • 相关 Android 源码 : Launcher 源码 , ActivityThread.java , Am.java , ActivityRecord.java , 等源码下载
  • Trace 分析中的文件 : Method_Trace.trace 文件下载

一、 常用的耗时方法优化方案 ( 重要 )


【Android 性能优化】应用启动优化 ( 启动优化项目 | 界面启动时间 | 启动优化项目 | 方法追踪 MethodTracing )

【Android 性能优化】应用启动优化 ( 方法追踪代码模板 | 示例项目 | SD 卡访问权限 | 示例代码 | 获取 Trace 文件 | Android Studio 查看文件)

【Android 性能优化】应用启动优化 ( Trace 文件分析 | 结合代码分析 Trace 文件 )

在上面的三篇博客中 , 讲解了如何使用 Trace 工具 , 追踪指定方法片段的执行详细细节 , 每个方法的执行时间 , 将耗时最长的几个方法进行优化 , 具体的优化方案如下 :

1. 子线程中运行该耗时方法 : 开启线程 , 将耗时方法放在线程中运行 ; 但这种方法并不是全能的 ;

某些第三方库初始化 , 不能在子线程中调用 , 如包含 Handler 初始化 , 必须在主线程中进行初始化 ;

2. 懒加载 : 尽量使用懒加载策略 , 避免在应用启动时大量调用方法 ;

① 定时器或线程延迟加载 : 开一个定时器或线程过一段时间 ( 3 秒后 ) 加载 ;

② 在 onResume 方法中加载 ;

③ 广播加载 : 延迟 n 秒发送广播 , 在广播中加载 ;

④ 第三方框架使用时加载 : 某些第三方框架 , 如 OKHttp 等 , 封装在一个单例类中 , 用到的时候再初始化 , 不要在启动的时候加载全部组件 ;

在 Application 或 Activity 代码的 onCreate 方法中 , 尽量不要有任何 访问 文件 , 数据库 , SharedPreference , 初始化第三方框架 等操作 , 只保留必要的赋值 , 布局加载代码 ;

二、 源码分析梳理


1. 应用启动时间计算相关源码分析

在 【Android 性能优化】应用启动优化 ( 启动白屏问题 | 应用启动时间测量 | 冷启动 | 热启动 | 应用启动时间计算源码分析 ) 博客中分析了应用启动时间计算相关的源码 , 主要是执行

adb shell am start -W 包名/完整 Activity 类名

命令的源码分析 , 执行该命令后 , 会自动计算出 ① 应用加载时间 TotalTime , ② 界面显示时间 ThisTime , ③ 用户等待时间 WaitTime ;

在 【Android 性能优化】应用启动优化 ( 启动优化项目 | 界面启动时间 | 启动优化项目 | 方法追踪 MethodTracing ) 博客中也有应用启动时间相关的总结 ;

2. Launcher 应用中启动 Android 应用流程

在下面的三篇博客中 , 详细分析了 Launcher 应用中 , 用户点击应用图标 , 启动应用的流程 , 根据应用启动流程分析出应用启动优化 , 应该优化哪些地方 ;

【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用简介 | Launcher 应用源码简介 | Launcher 应用快捷方式图标点击方法分析 ) 博客中介绍了 Launcher 应用的版本 , 源码位置 , 等基本情况 , 其主要的 Activity 界面 Launcher.java 文件 , 找到了该文件的应用图标点击事件 , 该点击事件就是触发应用启动的起点 ;

【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用启用普通安卓应用 | 应用进程分析 ) 博客中讲解了用户点击图标之后的操作 , 通过进程间通信 , 通知 Zygote 进程为新的 Android 应用创建新进程 , 并为其分配内存 , 为之后的 ActivityThread 主线程启动做准备 ; 并从进程角度分析了冷启动 ( 创建新进程 ) , 热启动区别 ( 复用旧进程 ) ;

应用启动截止到此处 , 全部是系统完成的工作 , 开发者无法干预该过程 ;

【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | ActivityThread 主函数分析 | 应用初始化 | 启动优化项目 ) 博客对应用入口类 , 即 ActivityThread 主函数类进行了分析 , 从这里开始初始化应用的 Application , Activity , 其中就发现应用启动时 , 需要调用 Application 和 Launcher Activity 的 onCreate 方法 , 这两个方法中绝对不能执行耗时操作 , 这也是启动优化唯一可以优化的地方 ;

启动优化就是在 Application 和 Launcher Activity 中不要做任何耗时操作即可 ;

三、 启动白屏解决方案


【Android 性能优化】应用启动优化 ( 主题背景图片设置 | 设置透明主题背景 | 设置应用启动主题背景、启动后恢复主题 ) 该博客中只是提供了一个权益之计 , 建议设置透明背景 , 所有的应用都设置一下 , 防止出现白屏 , 造成的用户体验不好 , 但是不建议只使用这种方案 , 同时也要优化下启动速度 ;

0 人点赞