Android启动流程优化 中篇

这篇具有很好参考价值的文章主要介绍了Android启动流程优化 中篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

启动优化(中篇)


本文链接:https://blog.csdn.net/feather_wch/article/details/131587046

1、我们可以优化部分

Application构建到主界面onWindowFocusChanged

2、启动方式(官方)

  1. 冷启动
  2. 热启动
  3. 温启动

3、怎么样算是卡顿?

  1. 卡顿:2-5-8原则
  2. 2秒以内:流程
  3. 2-5秒:可以接受
  4. 5-8秒:有些卡顿
  5. 8秒以上:非常卡顿,没办法接受,垃圾应用

4、Android Vitals是什么?

  1. google提出的计划,检测三种启动方式的耗时
  2. 冷5 热1.5 温2

5、如何查看App启动耗时时长?(app点击->可操作的时候onWindowFocuseChanged)

  1. 系统日志统计:ActivityManager:Displayed
  2. adb 命令统计启动时间:adb shell am start -S -W

6、CPU Profile/TraceView(废弃)相关图表

  1. Call Chart
  2. Flame Chart
  3. Top Down Tree
  4. Bottom Up Tree

7、假如版本不支持CPU Profiler怎么办?

  1. Debug.start/stopMethodTracing()
  2. Application创建时调用start(需要手动给予文件权限)
  3. onWindowFocuseChanged调用stop
  4. 文件默认生成在/sdcard/目录下,可以拖到AS中打开

8、StrictMode 严苛模式 setThreadPolicy()/setVmPolicy()

可以在开发阶段严格限制各个耗时操作、IO未关闭等等
出现违规操作根据配置,选择打印日志或者崩溃。

9、黑白屏各个版本差异

  1. windowSplashscreenContent Android8~Andorid11 优先于windowBackground
  2. Android12推出JectPack SplashScreen(基于Android SplashScreen API)同名库兼容到Andorid 6
  3. windowDisablePreview:会关闭黑白屏,但是进入时间更长更慢,体验不好
  4. 自定义简易的SplashScreenActivity+windowDisablePreview:可以做到进入可以打开一个有节日氛围的页面

10、如何减少inflate的时间?

  1. AsyncLayoutInflater帮助异步Inflate减少启动时间

11、AsyncLayoutInflater的局限性:

  1. 构建的View中没有Looper.prepare()需要我们自己去实现(子线程)
  2. 不支持设置LayoutInflater.Factory和LayoutInflater.Factory2
  3. 缓存队列默认大小10,超过了会导致主线程等待

12、EventBus、Arouter启动和初始化很耗时,可以采用接入插件来减少初始化时间,优化启动速度。
13、启动优化项的几个方面

  1. 合理使用异步初始化、延迟初始化、懒加载
  2. 启动过程避免耗时操作,数据库IO不放在主线程
  3. 类加载优化:提前异步执行类加载
  4. 合理使用IdleHandler进行延迟初始化
  5. 简化布局

14、应对面试的处理步骤!!

  1. 告诉对方,启动耗时统计的方案。
  2. 分析工具
  3. 发现了一些第三方库初始化比较耗时,可以放到子线程中处理。有些不可以。
  4. ARouter启动时间很慢,看github发现有新版本的插件可以使用,提升了启动速度

15、启动速度和内存优化也有关系?为什么会有影响?

  1. 和抖动和GC有关

16、字节 multidex 优化启动速度 => 误导读者文章来源地址https://www.toymoban.com/news/detail-531874.html

  1. 文中分析源码,用多进程去优化multidex速度,多进程本身只是不为了让APP ANR
  2. 修改了谷歌的multidex,谷歌multidex会将dex -> zip 比较耗时。真正优化在于去除了该步骤。

到了这里,关于Android启动流程优化 中篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android:启动流程

    第一步:启动电源以及系统启动 当电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序到RAM,然后 执行 第二步:引导程序 引导程序是在Android操作系统开始运行前的一个小程序。引导程序是运行的第一个程序,因此它是针 对特定的主板与芯片的

    2023年04月16日
    浏览(35)
  • Android系统启动流程分析

           当按下Android系统的开机电源按键时候,硬件会触发引导芯片,执行预定义的代码,然后加载引导程序(BootLoader)到RAM,Bootloader是Android系统起来前第一个程序,主要用来拉起Android系统程序,Android系统被拉起首先肯定会启动Linux内核。 备注: 我们再刷机时候,经常看到

    2024年02月15日
    浏览(44)
  • 笔记:Android 9系统启动流程

    当电源键按下时,引导芯片代码(汇编指令)会从预定的地方(固化在ROM)开始执行,将引导程序 BootLoader 加载到 RAM中,然后执行 BootLoader 是在 Android 操作系统开始前的一个小程序,主要作用是把系统OS拉起来并运行 位置: bootablebootloader 当 Linux系统被 BootLoader 程序拉起,

    2024年02月14日
    浏览(37)
  • Android系统启动流程 源码解析

    本文链接:https://blog.csdn.net/feather_wch/article/details/132518105 有道云脑图:https://note.youdao.com/s/GZ9d8vzO 1、整体流程 Boot Room BootLoader idle kthread init init ServiceManager zygote zygote SystemServer app 1、kernel/common/init/main.c 2、andorid.mk-android.bp编译 3、init是用户空间鼻祖 属于C、C++ Framework 1.1 启动源

    2024年02月11日
    浏览(46)
  • Android 11 SystemUI 启动流程

    从表面上看, 我们看到的 状态栏、通知栏、下拉菜单、导航栏、锁屏、最近任务、低电提示 等系统页面都是 SystemUI 的。SystemUI,在源码目录中位于: framework/base/packages 目录下, 可见 SystemUI 和 framework 是关联的, SystemUI 依赖了很多内部 API , 系统资源, SystemUI 编译是要依赖

    2024年02月13日
    浏览(38)
  • Android Framework 之 启动流程

    Android 系统的启动流程 Android 系统的启动流程可以分为以下几个主要步骤: 引导加载器(Bootloader)启动 :当你打开一个 Android 设备时,首先启动的是引导加载器。引导加载器负责启动 Android 的核心操作系统。 Linux 内核启动 :引导加载器加载并启动 Linux 内核。Linux 内核负责

    2024年02月14日
    浏览(35)
  • Android APP启动流程解析

    Android手机在开机Linux内核启动的时候,会加载system/core/init/init.rc文件,启动init进程,这个是Android特有的初始化程序,主要负责 各种复杂工作 负责开关机画面 文件系统的创建和挂载 启动Zygote(孵化器)进程 启动ServiceManager,它是Binder服务管理器,管理所有Android系统服务 fork

    2024年03月20日
    浏览(44)
  • Android启动之生命周期流程

    目录 一、简述 二、启动流程说明(一) 三、启动流程说明(二) 四、ServerThread常用组件的功能介绍 第一步:启动Linux: 1.Bootloader 2.kernel 第二步:Android系统启动:入口为Init.rc(system/core/rootdir) 1./system/bin/servicemanager:Binder守护进程; 2.Runtime; 3.Zygote:app_process/App_main; 4.Start VM;

    2024年02月09日
    浏览(51)
  • Android SystemServer 启动流程分析

    和你一起终身学 习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、SystemServer 启动的服务有哪些 二、SystemServer启动总体流程概述 三、SystemServer 如何启动,是谁启动的? 四、 SystemServer 启动入门 main 方法 五、SystemServer Run 方法初始与启动 六、

    2024年02月13日
    浏览(44)
  • Android 性能优化系列:启动优化进阶

    应用的速度优化是我们使用最频繁,也是应用最重要的优化之一,它包括启动速度优化、页面打开速度优化、功能或业务执行速度优化等等,能够直接提升应用的用户体验。 大部分人谈到速度优化,只能想到一些零碎的优化点,比如使用多线程、预加载等等,没有一个较为体

    2024年02月13日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包