Android App冷启动耗时优化

2024-03-11 16:44

本文主要是介绍Android App冷启动耗时优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        Android应用启动过程

          Android应用启动过程,主要包含app::onCreate及执行前的Application阶段及Activity::onCreate执行之后的Activity阶段,以及两个阶段之间的间隙handleMessage阶段和最终页面渲染上屏完成前数据加载阶段四个区间组成。

         具体来看,当App图标被点击后,zygote 进程 fork出当前应用进程,然后执行 ActivityThread 的 main方法,读取安装包中的二进制文件,并最终触发执行bindApplication方法

        接下来是对二进制中的符号进行解析及加载应用中需要的java类。这是我们在应用中能触达到的最早的阶段,attachBaseContext阶段,该阶段也是我们最早的执行预加载等用户自定义代码的时机。通常在这一阶段,我们剋用对dex的加载过程进行干预,如进行MultiDex优化。

        然后是加载依赖的第三方组件。上述所有工作完成后,回调app:onCreate方法。该方法是我们执行应用程序中各个模块的初始化及第三方组件的初始化的主要场所。

        在app:onCreate执行完成后,主线程会收到大量来自子线程的消息,当主线程执行完这些任务后,才会开始调用Activity的onCreate方法,开启应用首屏页面的解析、布局、绘制过程。页面然后根据加载到的数据进行更新,最终提交给SurfaceFlinger合成上屏。

        可行优化措施

        (1)在attachBaseContext 阶段进行MultiDex优化

        (2)通过类重排,减少内存页因PageFault而带来的耗时

        (3)dex2oat时将verify后的结果保存为vdex,后续直接加载vdex,省略verify步骤

        (4) 对app:onCreate中的初始化操作进行检查,删除非必要的初始化任务,同时将耗时任务改为子线程或异步

        (5)在handleMessage阶段,对子线程任务进行重排,减少任务间间隙

        (6)设置启动图片,避免启动过程中显示白屏

        (7)Activity:onCreate阶段,避免IO等阻塞主线程的操作,复杂任务改为子线程,或者进行预加载

        (8)DecoreView预加载

        (9)优化页面布局代码或提前将xml转为代码配合inflate,减少xml解析及视图初始化耗时

        (10)设计并实现通用异步任务调度、异步IO、异步UI、网络请求等通用框架及,简化性能优化过程

        

          

这篇关于Android App冷启动耗时优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/798413

相关文章

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级