IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android冷启动优化,灵魂拷问 -> 正文阅读

[移动开发]Android冷启动优化,灵魂拷问

创建完成了应用程序后,应用程序会负责下一阶段的任务

1、创建应用程序对象(application部分)

2、启动主线程

3、创建main activity(就是我们的第一个启动的页面)

4、加载试图

5、布局屏幕

6、执行初始化绘制

完成上述操作后,系统进程会交换当前显示的背景窗口,将其替换成main activity的页面,这个时候

用户就可以进行操作了,下图是冷启动的直观表示

20190907120151773.png

用户在看到页面完全展示出来的时机为main Activity的onResume的时候,那么我们就应该去考虑在此之前会存在哪些耗时的地方,分两个地方,第一是系统、第二是应用程序这一块

第一、Android系统启动进程的时候耗时,如果我们把应用的进程提前启动好了,那下次启动该应用的时候就可以节省出这一步的时间(其实这一步还是比较耗时的),一般来说就是双进程保活了(但是感觉这个越来越难了),如果是做自己设备的,那就好说了,直接launcher启动对应应用服务。还有就是加白名单了;

第二、初始化的白屏、Application的onCreate(),再到第一个启动的Activity

初始化时的白屏界面

在第一次打开APP的时候会出现一个白屏,这个我们可以去设置APP主题,更改其背景色或者更改背景图片来解决

  • 透明主题背景设置用下面的参数:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowFullscreen">true</item> <item name="android:windowIsTranslucent">true</item> </style>

  • 设置图片:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowBackground">@drawable/app_action_img</item> <item name="android:windowFullscreen">true</item> <item name="android:windowDrawsSystemBarBackgrounds">false</item> </style>

Application优化

正常开发我们要集成的那些第三方:定位、X5、友盟之类的,还有一些IO操作,或者是一些跨进程通信的,这些操作都会导致Application的onCreate方法中过多的耗时去进行这些操作,我们可以采用两种办法

  1. 按需初始化,如果不是非要在application中初始化的,就别放在onCreate中了

  2. 将初始化的一些操作放在异步线程中进行

第一个Activity优化

  • 页面布局优化

    复杂的页面会导致加载比较耗时,因为每个对象都要去创建,尽量去减少嵌套

  • 复杂逻辑能往后放放

    对于一些复杂的东西,或者不是必须初始化的东西放在onResume再去初始化,或者监听View,等View全展示出来了,再去初始化一些非必要的数据

  • 页面预加载

    实际开发中我们会发现在onCreate中setContentView这一步其实比较耗时,所以可以在Application中开启线程用LayoutInflater预先得到这个View,然后存起来,在setConetntView的时候,就不要去设置R.id,直接设置view就好了;这么做你会发现越复杂的布局提升的效率就越大,但是它长久持有的内存也大,自己可以去测试测试,一般来说比较重要的页面才这么做,省点内存

最后

在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

计模式汇总、Gradle知识点、常见算法题汇总。)
[外链图片转存中…(img-ZicI3OM8-1630503533047)]
本文在开源项目:【CodeChina】中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:30:10  更:2021-09-02 11:30:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 5:48:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码