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

相关文章

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份