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

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

文章目录

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

二、 源码分析梳理

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


目录
相关文章
|
12月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
1128 4
|
18天前
|
数据采集 监控 API
告别手动埋点!Android 无侵入式数据采集方案深度解析
传统的Android应用监控方案需要开发者在代码中手动添加埋点,不仅侵入性强、工作量大,还难以维护。本文深入探讨了基于字节码插桩技术的无侵入式数据采集方案,通过Gradle插件 + AGP API + ASM的技术组合,实现对应用性能、用户行为、网络请求等全方位监控,真正做到零侵入、易集成、高稳定。
343 31
|
6月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
143 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
6月前
|
Java Android开发
Android studio中build.gradle文件简单介绍
本文解析了Android项目中build.gradle文件的作用,包括jcenter仓库配置、模块类型定义、包名设置及依赖管理,涵盖本地、库和远程依赖的区别。
565 19
|
7月前
|
数据采集 JSON 网络安全
移动端数据抓取:Android App的TLS流量解密方案
本文介绍了一种通过TLS流量解密技术抓取知乎App热榜数据的方法。利用Charles Proxy解密HTTPS流量,分析App与服务器通信内容;结合Python Requests库模拟请求,配置特定请求头以绕过反爬机制。同时使用代理IP隐藏真实IP地址,确保抓取稳定。最终成功提取热榜标题、内容简介、链接等信息,为分析热点话题和用户趋势提供数据支持。此方法也可应用于其他Android App的数据采集,但需注意选择可靠的代理服务。
298 11
移动端数据抓取:Android App的TLS流量解密方案
|
6月前
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
1539 2
|
9月前
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
859 83
|
安全 Android开发 数据安全/隐私保护
深入探讨iOS与Android系统安全性对比分析
在移动操作系统领域,iOS和Android无疑是两大巨头。本文从技术角度出发,对这两个系统的架构、安全机制以及用户隐私保护等方面进行了详细的比较分析。通过深入探讨,我们旨在揭示两个系统在安全性方面的差异,并为用户提供一些实用的安全建议。
|
11月前
|
网络协议 Linux Android开发
深入探索Android系统架构与性能优化
本文旨在为读者提供一个全面的视角,以理解Android系统的架构及其关键组件。我们将探讨Android的发展历程、核心特性以及如何通过有效的策略来提升应用的性能和用户体验。本文不包含常规的技术细节,而是聚焦于系统架构层面的深入分析,以及针对开发者的实际优化建议。
314 21
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
467 15
Android 系统缓存扫描与清理方法分析

热门文章

最新文章