android 启动速度优化终极方案
之前也做过启动优化,无非是把那些耗时的操作放到子线程,或者延迟初始化。
但是对于我们这个项目,合作方要求必须更加优化启动速度。
既然已经提出来了, 不可逃避,那就想尽各种办法去优化吧。
1.Debug.startMethodTrace
用methodtrace 去查找方法的执行时间,凡是执行超过100ms 的,都要优化。
当然从最大的开始优化。很多超过200ms 的,更要想办法去优化。
2.想办法优化,比如开屏广告素材加载很耗时,那么我就用上次的缓存,这次在启动app之后,找个时机去初始化。
3.很多以为必须要放在主线程里面的东西,其实可以放到子线程。
有写时候,可以用锁,让主线程去等待一下子线程,但是会开两个线程去做事情。大概可以优化500ms。比如我们的插件框架。Fragment 的加载依赖于插件框架的加载完成,但是不得不提的是,加载太慢了。这之后,我可以在主工程要用插件的地方,等着子线程去加载完成。有很多方式,比如锁。其实很多人都会认为不可以在子线程初始化,其实是可以的。
4.不一定要开一个线程,可以开两个线程。并且按照重要性设置优先级。
我是开了两个线程,太多也不好。现在都是多核处理器,那么两个线程不会浪费多核。
比如我下面这个代码。
Thread thread = new Thread("PluginManager.init") {@Overridepublic void run() {super.run();HotfixManager.init(application);PluginManager.init(application);PluginManager.preLoadDexFile();}};thread.setPriority(9);thread.start();
经过以上优化,我的app 又在不能优化的基础上,提高了1-2s 的启动速度。在小米6可以达到1.2s 的启动速度。
总结:
1.既然现在的小优化不能达到你要的水平,那么就大刀阔斧的改吧。因为小改是不会有大产出,而且反正还在开发阶段,那么就什么都不要怕了。
2.不要懒,也不要怕改了代码,跑程序慢。勤奋一点,多几几次。
android 启动速度优化终极方案相关推荐
- Android 启动速度优化
Android 启动速度优化 前序 统计 adb测量 手动打点 方案 预加载 class字节码的预加载 Activity预创建 Glide预初始化 WebView预加载 数据预加载 三方库初始化 布局 ...
- 深入探索Android启动速度优化
前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 在性能优化的整个知识体系中,最重要的就是稳定性优化,在上一篇文章 <深入探索Andro ...
- Android启动速度优化
欢迎访问我的个人网站:https://coderyuan.com 最近做了一些Android App启动速度的优化,有一些心得,整理整理 影响启动速度的原因 高耗时任务 数据库初始化.某些第三方框架初 ...
- 带你彻底搞懂Android启动速度优化!吐血整理
说起IT行业,大多数人脑海里反应出的第一个标签一定是"高薪",而说起程序员,大家更多想到的可能是: 秃顶.木讷.格子衫: 加班多.能赚钱.不花钱: 没对象-- 甚至很多人还说&qu ...
- Android网络代理终极方案(适用于手机及电视盒子设备)
adb命令设置全局代理 adb shell settings put global http_proxy ip:port 如: adb shell settings put global http_p ...
- 记录一个android性能优化宝藏级总结
发现一个android性能优化文章宝藏级总结,太赞了,感谢大佬的无私奉献总结,防止丢失,在此记录一下 传送门 复制一些目录,增加一些篇幅{嘻嘻} 优化心得和经验 抖音 Android 性能优化系列:启 ...
- 深入探索Android布局优化(上)
前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. Android的绘制优化其实可以分为两个部分,即布局(UI)优化和卡顿优化,而布局优化的核心 ...
- Android 性能优化必知必会(2020-5-16)
做了这么久性能相关的工作,也接触了不少模块,说实话要做好性能这一块,真心不容易.为什么这么说? 是因为需要接触的知识实在是太多了, Android 是一个整体,牵一发而动全身,不是说只懂一个模块就可以 ...
- 你想要的Android性能优化系列:启动优化 !
文章目录 一.概述 二.应用启动流程介绍 三.优化核心思想 四.时间检测 4.1 Displayed 4.2 adb shell 4.3 reportFullyDrawn() 4.4 代码打点 4.5 ...
最新文章
- 同时更改一条数据_数据库中的引擎、事务、锁、MVCC(二)
- 软件质量保证与测试文档怎么写,软件质量保证与测试整理版.pdf
- linux下查看监听port相应的进程
- TensorFlow——[基本图像分类]fashion-mnist及mnist_reader.py运行错误[TypeError: Invalid dimensions for image data]
- 深入浅出的webpack4构建工具--webpack4+react构建环境(二十)
- DataView数据视图的使用 winform
- 使用gdb进行程序调试1-在GDB中运行程序
- php dio获取串口数据,flutter通过dio读取二进制数据,比如通过api接口读取图片
- erp系统是什么的简称
- 无线覆盖技术的重要性
- 基于java图书销售系统
- 福昕PDF阅读器文本复制功能设置
- 计算机蓝屏重启,电脑蓝屏重启,详细教您电脑经常自动蓝屏重启怎么办
- 览器野史 UserAgent列传
- mysql ndb存储引擎_NDB存储引擎 | 学步园
- 现代化医院PACS/RIS系统概述
- trac linux,CentOS下安装Trac笔记
- 一些程序设计模式的整理
- JWB1: webapp相关简介
- python 日期转换
热门文章
- 1000在计算机术语是什么意思,计算机里所提及的1k字是什么
- arduino项目_quot;Arduino智能车项目quot;实战班开班!
- annie安装教程与Access is denied解决方法
- appium+python搭建自动化测试框架_TestAPP框架(三)
- 前端技术周刊 2018-03-02
- 已知/未知宽高的浮动元素水平居中对齐 和 图片水平垂直居中对齐
- android的WindowManager.addView弹窗添加
- 学 Win32 汇编[12]: PTR、OFFSET、ADDR、THIS
- 配置CAS应用客户端
- 使用Ultra Librarian转换芯片的Altium Designer封装格式