• 一背景
  • 二冷启动过程
  • 三Window Background
    • 1 APP启动时白屏黑屏Activity打开时白屏黑屏
    • 2 秒开方案
      • 21 设置自定义带windowBackground的Theme
      • 22 为你的launcher Activity设置你的启动Theme

一、背景

在开发过程中,发现每次点击桌面app图标之后,都有一个在明显的桌面等待时间,机型越低端的越明显,因此考虑进行优化解决。

[图片太大]

从图1中可以看到,在图标按钮被按下后,明显在延迟了1-2s后应用才给出反应;而图2在点击后则直接有了应用反应,完全达到了秒开应用的效果。

二、冷启动过程

要做优化首先就要了解应用冷启动的过程:

有兴趣的同学可以研究下细节,简单的概述冷启动过程可以如下:

Zygote Fork Proccess
-> Application:attachBaseContext()
-> Application:onCreate()
-> MainActiviity:onCreate()

多歧路,今犹在

了解了冷启动的过程,问题看上去就似乎变得很简单了,我只要把这个几个函数优化好、做好同步异步操作、减少函数耗时是不是就可以达到秒开了? #哇塞!好机智的样纸#

不得不说,这真是一个坑。

关于冷启动的优化,其实主要集中在上述的几个生命周期函数中,我们也做了大量的工作去研究关于生命周期函数内的优化,在一方面我们必须承认冷启动的优化的确是很有意义和必须的

但是,我们也最终认识到,应用秒开 和 冷启动优化真的关系不大 [捂脸][捂脸]

三、Window Background

在AndroidDeveloper的Launch-Time Performance有这么一句话:

当打开一个Activity时,如果这个Activity所属Application还没有在运行,系统会为这个Activity的创建一个进程(每开启一个进程都会有一个Application,所以Application的onCreate()可能会被调用多次),但进程的创建与初始化都需要时间,在这个动作完成之前,如果初始化的时间过长,屏幕上可能没有任何动静,用户会以为没有点到按钮。

所以既不能停在原来的地方又没到显示新的界面,怎么办呢?这就有了StartingWindow(也称之为PreviewWindow)的出现,这样看起来就像Activity已经启动起来了,只是数据内容还没有初始化好。

StartingWindow一般出现在应用程序进程创建并初始化成功前,所以它是个临时窗口,对应的WindowType是TYPE_APPLICATION_STARTING。目的是告诉用户,系统已经接受到操作,正在响应,在程序初始化完成后实现目的UI,同时移除这个窗口.

一般情况下我们会对Application和Activity设置Theme,系统会根据设置的Theme初始化StartingWindow。Window布局的顶层是DecorView,StartingWindow显示一个空DecorView,但是会给这个DecorView应用这个Activity指定的Theme,如果这个Activity没有指定Theme就用Application的(Application系统要求必须设置Theme)

在Theme中可以指定窗口的背景,Activity的ICON,APP整体文字颜色等,如果说没有指定任何属性,就会用默认的属性,也就是上文中提到的空DecorView.

3.1 APP启动时白屏/黑屏、Activity打开时白屏/黑屏

口袋助理在之前为了解决“APP启动时白屏/黑屏、Activity打开时白屏/黑屏”为应用设置了透明背景。

<style name="xx" parent="AppTheme"><item name="android:windowFullscreen">true</item><item name="android:windowIsTranslucent">true</item>
</style>

设置后,用户点击我们APP图标后,需要等待2秒左右的时候才会显示contentView。造成了APP启动速度慢的假象,其实Activity已经启动了,只是background是透明的,这时候你点击桌面的其他地方是无效的

3.2 秒开方案

思路:我们之前设置了Window透明,实现了去掉白屏和黑屏,完全可以为MainActivity设置一个log样式的Window Background 从而实现秒开

3.2.1 设置自定义带windowBackground的Theme

        <item name="android:windowBackground">@drawable/splash</item><item name="android:windowFullscreen">true</item><item name="android:windowNoTitle">true</item><!-- <item name="android:windowIsTranslucent">true</item> --> <!-- 透明背景不要了 -->

前两行代码是设置Theme不透明并且默认渲染的背景图是我们必看闪屏页的图片。

windowBackground:关键,主要设置你想要的背景图或者是动态自绘的drawable皆行,这个视图会在你冷启动时渲染给用户过渡看。

windowFullscreen:全屏展示,免得顶部状态栏显现颜色不一致过于脱节和突兀

3.2.2 为你的launcher Activity设置你的启动Theme

(4.6.27)Android启动优化之打造秒开应用相关推荐

  1. Android 启动优化(五)- AnchorTask 1.0.0 版本正式发布了

    今天,更新一下 Android 启动优化有向无环图系列的最后一篇文章.最近一段时间,暂时不会更新这方面的文章了.系列文章汇总如下: Android 启动优化(一) - 有向无环图 Android 启动 ...

  2. 启动优化·基础论·浅析 Android 启动优化

    " [小木箱成长营]启动优化系列文章(排期中): 启动优化 · 工具论 · 启动优化常见的六种工具 启动优化 · 方法论 · 这样做启动优化时长降低 70% 启动优化 · 实战论 · 手把手 ...

  3. android布局优化方案,Android启动优化-布局优化

    Android启动优化-布局优化 安卓应用开发发展到今天,已经成为一个非常成熟的技术方向,从目前的情况看,安卓开发还是一个热火朝天的发展,但高级人才却相对较少,如今移动互联网的开发者也逐渐开始注重插入 ...

  4. 深入探索Android 启动优化(七) - JetPack App Startup 使用及源码浅析

    本文首发我的微信公众号:徐公,想成为一名优秀的 Android 开发者,需要一份完备的 知识体系,在这里,让我们一起成长,变得更好~. 前言 前一阵子,写了几篇 Android 启动优化的文章,主要是 ...

  5. Android 启动优化(一) - 有向无环图

    前言 说到 Android 启动优化,大家第一时间可能会想到异步加载.将耗时任务放到子线程加载,等到所有加载任务加载完成之后,再进入首页. 多线程异步加载方案确实是 ok 的.但如果遇到前后依赖的关系 ...

  6. Android启动优化实战(有效降低APP启动时间)

    1.概述 手机点击一个APP,用户希望应用能够及时响应并快速加载.启动时间过长的应用不能满足这个期望,并且可能会令用户失望.这种糟糕的体验可能会导致用户在 Play 商店针对您的应用给出很低的评分,甚 ...

  7. android 启动优化方案,Android 项目优化(五):应用启动优化

    介绍了前面的优化的方案后,这里我们在针对应用的启动优化做一下讲解和说明. 一.App启动概述 一个应用App的启动速度能够影响用户的首次体验,启动速度较慢(感官上)的应用可能导致用户再次开启App的意 ...

  8. Android 启动优化(一)

    声明:本篇文章已授权微信公众号 YYGeeker 独家发布. 前言 对于一个APP来说,启动秒开,切换顺畅的体验能给用户留下良好的第一印象,启动速度对于用户体验及提高用户留存的重要性不言而喻.那么我们 ...

  9. Android启动优化方案调研

    /   今日科技快讯   / 7月21日,国家互联网信息办公室依据<网络安全法><数据安全法><个人信息保护法><行政处罚法>等法律法规,对滴滴全球股份 ...

最新文章

  1. 5 个 APP 自动化测试辅助定位工具,你用过几个?
  2. 中关村论坛首次设置技术交易板块,人工智能和新一代信息技术专场发布会即将召开...
  3. Android MTK平台最完备的开机动画修改教程
  4. postgres 显示变量_sql - 如何在PostgreSQL查询中声明变量
  5. Mac Hadoop的安装与配置
  6. laravel框架制作缩略图和水印
  7. linux将程序锁死,Linux死锁现象及分析方法(转)
  8. 【英语学习】【WOTD】circadian 释义/词源/示例
  9. Treeview的文件目录配置
  10. m4s格式转换mp3_AnyMP4 MP3 Converter for Mac(音视频mp3格式转换工具)
  11. winform直接控制云台_Snoppa Vmate掌上防抖云台相机深度评测:日常视频轻松直出...
  12. stm32过零检测电路
  13. k-means均值聚类
  14. 数据可视化神器,精彩的地图可视化展示
  15. mysql md5 数据库_mysql数据库密码md5加密
  16. NR PRACH(六) type 2(2-step) RA基本过程及时频域映射
  17. php artisan migrate,PHP artisan迁移不创建新表
  18. 【算法java版11】:实现求s = a + aa + aaa + aaaa + aa...a 的值,其中a是一个数字,几个数相加由键盘控制
  19. 程序猿从不缺对象,想要随时可以new出来一个
  20. 基于Linux的视频监控系统构建方法

热门文章

  1. 算法介绍——快速排序
  2. 南航毕业程序媛中奖一个亿裸辞后:30岁没钱没工作!中奖不如写代码
  3. 复旦EMBA邀分众传媒陈岩,谈科技在营销细分领域的应用
  4. php记录访问保存数据库,php无需数据库访问者计数器(txt文本保存数据)
  5. 计算机辅助设计效果论文,计算机辅助设计应用于艺术设计的特点
  6. 英伟达单日涨出一个AMD、两个英特尔,市值冲向万亿美元!
  7. win10清理网上邻居密码
  8. git 命令删除分支
  9. Layui回调函数改变不同数据的颜色
  10. SpringBoot调用存储过程