android性能优化05---app启动优化

author author     2023-04-19     143

关键词:

参考技术A 其实启动框架就是一个任务调度系统,是手淘启动的“大管家”。
管家要做的事情就是把它们的关系梳理得明明白白,有条不紊,合理安排位置、调度时间,同时提升硬件资源的利用率。

总结下来无非就是两点:

有向无环图[拓扑排序]

可用方案
APT,字节码插桩,利用ContentProvider
面试题LeakCanary 为什么不需要在Application中手动初始化?

①点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起 startActivity请求;
②system_server进程接收到请求后,向zygote进程发送创建进程的请求;
③Zygote进程fork出新的子进程,即App进程;
④App进程,通过Binder IPC向sytem_server进程发起attachApplication请求;
⑤system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC 向App进程发送scheduleLaunchActivity请求;
⑥App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主 线程发送LAUNCH_ACTIVITY消息;
⑦主线程在收到Message后,通过反射机制创建目标Activity,并回调 Activity.onCreate()等方法。
⑧到此,App便正式启动,开始进入Activity生命周期,执行完 onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面。

应用有三种启动状态,每种状态都会影响应用向用户显示所需的时间:冷启动、温启动与热启动。

adb命令启动应用,一般会输入三个值:ThisTime、TotalTime与WaitTime。
1.WaitTime:包括前一个应用Activitypause的时间和新应用启动的时间;
2.ThisTime:表示一连串启动Activity的最后一个Activity的启动耗时;
3.TotalTime:表示新应用启动的耗时,包括新进程的启动和Activity的启动,但不包括前一个应用Activitypause
的耗时。

StrictMode是一个开发人员工具,它可以检测出我们可能无意中做的事情,并将它们提请我们注意,以便我 们能够修复它们。 StrictMode最常用于捕获应用程序主线程上的意外磁盘或网络访问。帮助我们让磁盘和网络操作远离主线程, 可以使应用程序更加平滑、响应更快

当系统加载并启动 App 时,需要耗费相应的时间,这样会造成用户会感觉到当点击 App 图标时会有 “延迟” 现象,
为了解决这一问题,Google 的做法是在 App 创建的过程中,先展示一个空白页面,让用户体会到点击图标之后立
马就有响应。
如果你的application或activity启动的过程太慢,导致系统的BackgroundWindow没有及时被替换,就会出现启动
时白屏或黑屏的情况(取决于Theme主题是Dark还是Light)。

消除启动时的黑/白屏问题,大部分App都采用自己在Theme中设置背景图的方式来解决。

然后在Activity的onCreate方法,把Activity设置回原来的主题。

这么做,只是提高启动的用户体验。并不能做到真正的加快启动速度。

android性能优化之启动优化(代码片段)

Android性能优化之启动优化1.启动窗口优化Android系统在Activity的窗口尚未启动完成前,会先显示一个启动窗口(StartingWindow),等界面的第一帧渲染完成后再从启动窗口切换到真正的界面显示,启动窗口通常情况... 查看详情

android性能优化之启动优化(代码片段)

Android性能优化之启动优化1.启动窗口优化Android系统在Activity的窗口尚未启动完成前,会先显示一个启动窗口(StartingWindow),等界面的第一帧渲染完成后再从启动窗口切换到真正的界面显示,启动窗口通常情况... 查看详情

android性能优化-启动速度优化(代码片段)

文章目录1.启动的状态2.冷启动耗时2.1系统日志统计2.2adb命令统计3.启动分析3.1CPUProfile工具简单教程3.2启动耗时分析3.3使用DebugApi生成.trace文件4.StrictMode严苛模式5.结尾做开发除了实现功能,还要注重优化,性能优化包括的... 查看详情

android性能优化---启动优化--1(启动优化介绍+启动时间测量)

启动优化介绍(1)背景介绍为什么要进行启动优化?第一体验和八秒定律,用户接触app首先就是第一体验比较重要,其次,app如果打开时间超过8s,大概会流失70%的用户。(2)启动分类:冷启动、热启动、温启动冷启动:特点:... 查看详情

android性能优化---启动优化--1(启动优化介绍+启动时间测量)

启动优化介绍(1)背景介绍为什么要进行启动优化?第一体验和八秒定律,用户接触app首先就是第一体验比较重要,其次,app如果打开时间超过8s,大概会流失70%的用户。(2)启动分类:冷启动、热启动、温启动冷启动:特点:... 查看详情

android面试之必问性能优化(代码片段)

对于Android开发者来说,懂得基本的应用开发技能往往是不够,因为不管是工作还是面试,都需要开发者懂得大量的性能优化,这对提升应用的体验是非常重要的。对于Android开发来说,性能优化主要围绕如下方面展开:启动优化... 查看详情

android性能优化实践与总结(包含启动,内存优化)(代码片段)

应用中性能优化实践与总结(精心总结)任何优化都需要进行检测,以数据说话,优化前和优化后有了怎样的提升[TOC]启动优化检测启动时间检测工具任选其一hugo插件,自己定义时间开始和结束手动计算时间.AOP工具AspectJadb的amstart命令... 查看详情

抖音android性能优化系列:启动优化实践(代码片段)

组件,其初始化就是借助了一个叫ProcessLifecycleOwnerInitializer的ContentProvider进行初始化的。LifeCycle的初始化只是进行了Activity的LifecycleCallbacks的注册耗时不多,我们在逻辑层面上不需要做太多的优化。值得注意的是,如果这类用于... 查看详情

android性能优化之启动耗时测量(代码片段)

Android启动优化之启动耗时测量本文基于Android11.0源码分析,涉及如下文件frameworks/base/services/core/java/com/android/server/wm/ActivityMetricsLogger.javaframeworks/base/services/core/java/com/android/server/wm/ActivityR 查看详情

android性能优化之启动耗时测量(代码片段)

Android启动优化之启动耗时测量本文基于Android11.0源码分析,涉及如下文件frameworks/base/services/core/java/com/android/server/wm/ActivityMetricsLogger.javaframeworks/base/services/core/java/com/android/server/wm/ActivityR 查看详情

❤️android性能优化之启动优化❤️(代码片段)

...赞、收藏、评论粉丝福利:公众号「帅次」一个分享Android体系技术·相关知识·面试题库·技术互助·干货·资讯·高薪职位·教程的地方。🔥背景        用户希望应用能够快速打开。启动时间过长的应用不能满足这个... 查看详情

抖音android性能优化系列:启动优化之理论和工具篇

Rhea指占用CPU进行计算所花费的时间绝对值,中断、挂起、休眠等行为是不会增加CPUTime的,所以因CPUTime开销占比高导致的不合理耗时点往往是逻辑本身复杂冗长需要消耗较多cpu时间片才能处理完。比较常见的高CPU占用是循环,比... 查看详情

android面试-android性能优化和内存优化app启动速度一线大厂的实战案例解析

前言朋友近期面试,经常被问到:你有什么性能优化经验?虽然他在项目中有一些项目优化处理,但没有做过梳理,并且内容也都比较零散,因此在面试回答得不是很好。面试官:你有什么性能优化经... 查看详情

android性能优化—布局优化技巧(代码片段)

前面几篇文章在前面几篇文章当中,Android内存泄漏和OOM分析(一)Android内存泄漏和OOM分析(二)Androidapp启动优化我们学习了如何通过合理管理内存,app的优化启动的方式来提升应用程序的性能。实际上界面布局也会对应用程... 查看详情

android面试官:“你做过那些性能优化?“(代码片段)

...点说不过去了,下面是我自己总结的一套通用级别的Android性能优化。1、你对APP的启动有过研究吗?有做过相关的启动优化吗?程序员:之前做热修复的时候研究过Application的启动原理。项目中也做过一些启动优化。面试官:哦ÿ... 查看详情

android程序性能优化——anr卡顿优化内存优化耗电优化apk大小优化以及启动速度和实战项目

ANR产生的原因只有当应用程序的UI线程响应超时才会引起ANR,超时产生原因一般有两种。1,当前的事件没有机会得到处理,例如UI线程正在响应另一个事件,当前事件由于某种原因被阻塞了。2,当前的事件正... 查看详情

android性能优化---启动优化---2(方法耗时获取与异步初始化)(代码片段)

方法耗时获取方法耗时获取分为常规方式和AOP的方式,AOP的代表主要是学习AspectJ的使用。AOP实战Demo1、想了解更多AOP可以参考https://www.jianshu.com/p/2e8409bc8c3b,2、可能遇到的问题:https://blog.csdn.net/zxl1173558248/article/details/1200857783、... 查看详情

android性能优化---启动优化---2(方法耗时获取与异步初始化)(代码片段)

方法耗时获取方法耗时获取分为常规方式和AOP的方式,AOP的代表主要是学习AspectJ的使用。AOP实战Demo1、想了解更多AOP可以参考https://www.jianshu.com/p/2e8409bc8c3b,2、可能遇到的问题:https://blog.csdn.net/zxl1173558248/article/details/1200857783、... 查看详情