`
iaiai
  • 浏览: 2203418 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转]Android冷启动白屏解析,带你一步步分析和解决问题

 
阅读更多

关于首次启动程序白屏时间过长这个问题其实我也早就发现了,而且正如评论中所说,有的时候白屏时间可以长达七八秒。

看来这个问题已经是一个普遍存在的现象了,可能很多人对此都产生了疑惑。那么这里我就专门写一篇文章来为大家答疑解惑吧。

问题重现

我初次发现这个问题是在升级了Android Studio 2.0之后,当时Android Studio的版本是从1.5直接升级到了2.0,一个如此大版本的跨跃说明改动肯定是比较大的。

然后从这个时候开始,每次我们将程序安装到一台新手机上并首次启动时,都会经历一个很长的白屏时间,如下图所示:

上图中的播放速度是实时速度,没有经过加速或减速。可以看到,这就是一个空项目,里面几乎没有任何功能,首次启动白屏竟然持续了5秒钟左右!虽说只是首次启动才会白屏这么长时间,但给用户造成这样的体验,实在是显得我们的程序太业余了,因此必须要想办法解决一下。

分析原因

一开始我将这个原因归结于是Android Studio 2.0的bug,毕竟一次性做了这么大的升级,有点bug也是很正常的。但是直到现在最新的Android Studio 2.2版本,这个问题依然还存在,好像Google完全就没有修复它的意思,这就不太对劲了。

然后我开始动手做实验,发现这个长时间白屏的问题其实和Android Studio的版本是没有关系的,而是和我们使用的gradle插件版本有关系。打开build.gradle文件查看一下,代码如下所示:
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
    }
}

可以看到,这里我使用的gradle插件版本是2.1.2,这个版本下是会出现长时间白屏的问题的。

但如果我将gradle插件的版本号降低,比如降到2.0.0,再运行程序的话就给弹出这样的提示:

提示我2.0.0版本的gradle插件是不支持Instant Run的,让我升级到2.1.2。但同时你会发现,长时间白屏的问题不见了。

但这里我还要再专门说明一下,其实并不是2.0.0版本的gradle插件不支持Instant Run,而是因为我当前使用的是2.1版的Android Studio,它和2.0.0版本的gradle插件在Instnat Run功能方面不兼容。如果你是使用的2.0版本的Android Studio,那么你会发现2.0.0版本的gradle插件也是支持Instant Run的。

如果你有兴趣的话可以把gradle插件的版本号再改低一些,比如1.5.0,或者1.3.0,这两个插件版本就是完全不支持Instant Run功能了,你会发现它们都不会造成长时间白屏的问题。

这样我们基本就把问题的原因定位出来了,支持Instant Run功能的时候就会出现长时间白屏的情况,不支持Instant Run功能的时候就一切正常,看来罪魁祸首果然还是Instant Run呀。

解决问题

但是Instant Run是Android Studio 2.0中重磅推出的功能,如果存在这么严重的bug,那么谁还敢使用呢?Google岂不是推出了一个废功能?

当然不是,遇到这个问题就吓得不敢用Instant Run的话,只能说明你对Instant Run功能没有真正理解。Instant Run为了能够让我们快速部署代码,背后其实是有一套非常复杂的逻辑的,比如要在APK中建立服务器与Android Studio进行通信,以及代码差异比对和替换等,这里给大家贴一张Instant Run的工作原理图来体验一下:

这张图比较复杂,看不懂也没关系,因为我也看不懂,但是至少这让我们能直观地感受到Instant Run背后处理的工作是非常繁重的。

既然如此,相信大家也应该理解一下为什么首次启动会白屏这么长时间,因为为了要让Instant Run可以正常工作,我们的程序需要做非常多的初始化工作。而这一次的长时间白屏,换来的却是后续开发效率的剧增,这个交易我认为是相当值得的。

那有的朋友可能就要产生质疑了,说我们理解有什么用呀?用户又不会理解什么是Instant Run,这么久的白屏是会严重损伤用户体验的。

但是大家有没有想过Instant Run是用来做什么的?是用来提升开发效率的,没错,就是开发效率!也就是说,只有在开发阶段才会有Instant Run这个东西,在正式的产品中是完全不存在Instant Run的!

是不是一语点醒梦中人了?其实说白了,我们担心这个长时间白屏会损伤用户体验纯粹是在杞人忧天,Google早就帮我们都考虑过了,release版的程序是不会出现这种现象的。不信的话我现在就打一个签名后的APK包,然后我们装到手机上试一下,如下所示:

这和刚才是一模一样的程序,我没有修改任何的代码,只是打了一个release包,现在就没有长时间白屏的情况了。

进一步优化

如果你的观察力非常敏锐的话,应该能发现其实我们的程序还是会经历一个白屏的阶段,只不过非常短,瞬间就跳过了。

这个就和Instant Run无关了,这是由于在启动的时候程序都要进行一些基本的初始化操作,所有程序都是要经历这个过程的。

虽说这个白屏时间很短,并没有什么太大的影响,不过我们还是可以通过代码来进一步优化的。修改styles.xml中主题相关的代码,如下所示:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    ......
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowNoTitle">true</item>
</style>

其中我们加入了两个属性,windowIsTranslucent和windowNoTitle,将这两个属性都设置成true,就可以让程序在初始化的时候窗口是透明的,初始化结束后程序主界面才会显示出来,从而也就完全看不到白屏界面了,如下图所示:

使用这种方式,虽然白屏界面看不到了,但是由于初始化的过程中窗口是透明的,会让用户感觉程序启动的响应速度稍微慢了点,不过其实这种差别都是毫秒级的,就没必要再为这个担心了。
  • 大小: 75.6 KB
  • 大小: 96.6 KB
  • 大小: 17.7 KB
  • 大小: 139.7 KB
  • 大小: 85.2 KB
  • 大小: 75.2 KB
分享到:
评论

相关推荐

    Android应用程序启动白屏黑屏优化

    在Android应用程序中,启动过程中的白屏或黑屏现象是非常常见的一个问题。这种现象通常发生在应用程序首次启动时,用户会看到一个短暂的空白屏幕,然后才是应用程序的主界面出现。这种情况会影响用户体验,让用户...

    浅谈android性能优化之启动过程(冷启动和热启动)

    Android 应用程序启动优化之冷启动和热启动详解 一、应用程序启动方式 Android 应用程序的启动方式可以分为两种:冷启动和热启动。 1. 冷启动:当启动应用程序时,后台没有该应用程序的进程,这时系统会重新创建...

    Android-Android冷启动优化app启动速度(视觉上提高启动速度)

    - **使用Profiler工具**: Android Studio内置的Profiler可以帮助开发者分析启动过程中的CPU、内存、网络等资源占用情况,定位性能瓶颈。 - **Logcat日志分析**: 通过查看Logcat输出,了解启动过程中的详细步骤和...

    Android项目冷启动优化——欢迎页

    在Android开发中,冷启动优化是一项至关重要的任务,它直接影响到用户的使用体验。本文将深入探讨如何优化Android项目的冷启动,以及如何设置欢迎页,包括倒计时功能、跳过选项,以及A应用如何在退至后台时不关闭...

    解决APP首次启动程序白屏时间过长的问题

    - 利用Android的冷启动和热启动机制,对不同启动情况进行优化处理。 - 使用Instant Apps或Split APKs技术,按需加载应用部分,降低首次加载的复杂度。 9. **测试与分析** - 使用性能分析工具(如Android Studio...

    解决Android应用冷启动时出现的白屏问题的方法

    Android 应用冷启动时,需要从Application开始启动,加载时间就会比较长,容易出现白色或黑色闪屏,观察一下手机上一些 其他APP 比如 微信、京东等就不存在这个现象。 原因分析 分析一下原因,其实是跟闪屏Activity...

    Android中Splash应用启动白屏问题的解决方法

    本文将详细介绍两种解决Android应用启动时白屏问题的方法。 方法一:设置启动Activity的主题样式 白屏问题通常是由于应用加载过程中的默认空白屏幕导致的。为了解决这个问题,我们可以自定义启动Activity的主题,使...

    GPS 的热启动 冷启动和温启动

    ### GPS的热启动、冷启动和温启动 #### 一、引言 全球定位系统(Global Positioning System,简称GPS)是一种重要的导航技术,通过利用卫星星座提供的信号来确定地面设备的位置、速度以及时间信息。在GPS的工作...

    Android启动APP时黑屏白屏的解决方法

    Android启动APP时黑屏白屏的解决方法是 Android 开发中常见的问题之一,它会对用户体验产生不良影响。本文将详细介绍 Android 启动APP时黑屏白屏的解决方法,并提供了详细的解决步骤和样例代码。 一、问题分析 当...

    GPS的冷启动、温启动和热启动介绍

    ### GPS的冷启动、温启动和热启动介绍 #### 一、引言 随着全球定位系统(GPS)技术的不断发展与普及,GPS设备已经成为我们日常生活不可或缺的一部分。无论是驾车出行还是户外探险,GPS都能提供准确的位置服务。...

    Android冷启动过程培训文档

    Android冷启动过程:从init守护进程到桌面显示

    Android性能之冷启动优化详析

    Android性能之冷启动优化详析是Android开发者们非常关心的问题,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值。 冷启动优化 冷启动是指APP在手机启动后第一次运行,或者APP进程...

    GPS冷启动、暖启动和热启动.pdf

    关于 GPS 冷启动、暖启动和热启动的解释 GPS 启动时间是一个比较混乱的概念,如果不具备一定的 GPS 知识比较难以理解。本文将借助外文的一些解释,希望能够用比较简单的语言让 GPS 爱好者们加深认识。 热启动(Hot...

    Android-Android开发辅助工具fpstopActivityactivity启动耗时电量cpu内存分析

    通过分析启动耗时,开发者可以定位可能导致延迟的代码段,进行优化,减少冷启动或热启动的时间。 电量消耗分析在电池寿命成为移动设备重要考量因素的今天尤为重要。开发者可以通过此工具追踪应用在不同操作下的电量...

    Android冷启动实现app秒开的实现代码

    Android 冷启动是一种技术,它可以让 app 在启动时快速展示启动界面,而不是等待 app 的主 Activity 启动完成。在 Android 中,冷启动是指在 app 启动时,系统会先加载启动界面,然后再加载主 Activity。这可以提高...

    完美解决Android App启动页有白屏闪过的问题

    总的来说,通过自定义主题、设置透明背景和正确处理启动页图片,可以有效地解决Android App启动页白屏问题,提高用户体验。同时,还可以考虑优化应用的启动速度,减少冷启动时间,进一步提升用户满意度。

    KUKA机器人通过示教器进行关机冷启动的具体方法演示.docx

    在工业自动化领域,KUKA机器人因其高效、精准和易用...总的来说,理解并掌握KUKA机器人示教器的关机冷启动步骤是每个操作员和维护人员必备的技能之一。通过遵循上述详细步骤,可以确保机器人系统的顺利重启和有效管理。

Global site tag (gtag.js) - Google Analytics