- 浏览: 2203418 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
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,就可以让程序在初始化的时候窗口是透明的,初始化结束后程序主界面才会显示出来,从而也就完全看不到白屏界面了,如下图所示:
使用这种方式,虽然白屏界面看不到了,但是由于初始化的过程中窗口是透明的,会让用户感觉程序启动的响应速度稍微慢了点,不过其实这种差别都是毫秒级的,就没必要再为这个担心了。
发表评论
-
带你深入理解 FLUTTER 中的字体“冷”知识
2020-08-10 23:40 634本篇将带你深入理解 Flutter 开发过程中关于字体和文 ... -
Flutter -自定义日历组件
2020-03-01 17:56 1110颜色文件和屏幕适配的文件 可以自己给定 import ... -
Dart高级(一)——泛型与Json To Bean
2020-02-23 19:13 1004从 Flutter 发布到现在, 越来越多人开始尝试使用 Da ... -
flutter loading、Progress进度条
2020-02-21 17:03 1179Flutter Progress 1 条形无固定值进度条 ... -
Flutter使用Https加载图片
2020-02-21 01:39 1019Flutter使用Https加载图片 使用http加载图片出 ... -
flutter shared_preferences 异步变同步
2020-02-21 00:55 847前言 引用 在开发原生iOS或Native应用时,一般有判断上 ... -
Flutter TextField边框颜色
2020-02-19 21:31 936监听要销毁 myController.dispose(); T ... -
flutter Future的正确用法
2020-02-18 21:55 807在flutter中经常会用到异步任务,dart中异步任务异步处 ... -
记一次Flutter简单粗暴处理HTTPS证书检验方法
2020-02-18 14:13 978最近在做Flutter项目到了遇到一个无解的事情,当使用Ima ... -
flutter 获取屏幕宽度高度 通知栏高度等屏幕信息
2019-07-27 08:39 1341##MediaQuery MediaQuery.of(con ... -
关于flutter RefreshIndicator扩展listview下拉刷新的问题
2019-07-10 19:40 1139当条目过少时listview某些嵌套情况下可能不会滚动(条目 ... -
flutter listview 改变状态的时候一直无限添加
2019-07-10 16:01 788setstate的时候会一直无限的调用listview.bui ... -
Flutter Android端启动白屏问题的解决
2019-07-09 00:51 1521问题描述 Flutter 应用在 Android 端上启动时 ... -
Flutter中SnackBar使用
2019-07-08 23:43 779底部弹出,然后在指定时间后消失。 注意: build(Bui ... -
Flutter 之点击空白区域收起键盘
2019-07-08 18:43 1790点击空白处取消TextField焦点这个需求是非常简单的,在学 ... -
Flutter 弹窗 Dialog ,AlertDialog,IOS风格
2019-07-08 18:04 1379import 'package:flutter/mate ... -
flutter ---TextField 之 输入类型、长度限制
2019-07-08 14:30 2336TextField想要实现输入类型、长度限制需要先引入impo ... -
【flutter 溢出BUG】键盘上显示bottom overflowed by 104 PIXELS
2019-07-08 11:13 1565一开始直接使用Scaffold布局,body:new Colu ... -
解决Flutter项目卡在Initializing gradle...界面的问题
2019-07-07 12:53 879Flutter最近很火,我抽出了一点时间对Flutter进行了 ... -
关于android O 上 NotificationChannel 的一些注意事项
2019-07-04 11:47 939最近在适配android O,遇到个问题,应用中原本有设置界面 ...
相关推荐
在Android应用程序中,启动过程中的白屏或黑屏现象是非常常见的一个问题。这种现象通常发生在应用程序首次启动时,用户会看到一个短暂的空白屏幕,然后才是应用程序的主界面出现。这种情况会影响用户体验,让用户...
Android 应用程序启动优化之冷启动和热启动详解 一、应用程序启动方式 Android 应用程序的启动方式可以分为两种:冷启动和热启动。 1. 冷启动:当启动应用程序时,后台没有该应用程序的进程,这时系统会重新创建...
- **使用Profiler工具**: Android Studio内置的Profiler可以帮助开发者分析启动过程中的CPU、内存、网络等资源占用情况,定位性能瓶颈。 - **Logcat日志分析**: 通过查看Logcat输出,了解启动过程中的详细步骤和...
在Android开发中,冷启动优化是一项至关重要的任务,它直接影响到用户的使用体验。本文将深入探讨如何优化Android项目的冷启动,以及如何设置欢迎页,包括倒计时功能、跳过选项,以及A应用如何在退至后台时不关闭...
- 利用Android的冷启动和热启动机制,对不同启动情况进行优化处理。 - 使用Instant Apps或Split APKs技术,按需加载应用部分,降低首次加载的复杂度。 9. **测试与分析** - 使用性能分析工具(如Android Studio...
Android 应用冷启动时,需要从Application开始启动,加载时间就会比较长,容易出现白色或黑色闪屏,观察一下手机上一些 其他APP 比如 微信、京东等就不存在这个现象。 原因分析 分析一下原因,其实是跟闪屏Activity...
本文将详细介绍两种解决Android应用启动时白屏问题的方法。 方法一:设置启动Activity的主题样式 白屏问题通常是由于应用加载过程中的默认空白屏幕导致的。为了解决这个问题,我们可以自定义启动Activity的主题,使...
### GPS的热启动、冷启动和温启动 #### 一、引言 全球定位系统(Global Positioning System,简称GPS)是一种重要的导航技术,通过利用卫星星座提供的信号来确定地面设备的位置、速度以及时间信息。在GPS的工作...
Android启动APP时黑屏白屏的解决方法是 Android 开发中常见的问题之一,它会对用户体验产生不良影响。本文将详细介绍 Android 启动APP时黑屏白屏的解决方法,并提供了详细的解决步骤和样例代码。 一、问题分析 当...
### GPS的冷启动、温启动和热启动介绍 #### 一、引言 随着全球定位系统(GPS)技术的不断发展与普及,GPS设备已经成为我们日常生活不可或缺的一部分。无论是驾车出行还是户外探险,GPS都能提供准确的位置服务。...
Android冷启动过程:从init守护进程到桌面显示
Android性能之冷启动优化详析是Android开发者们非常关心的问题,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值。 冷启动优化 冷启动是指APP在手机启动后第一次运行,或者APP进程...
关于 GPS 冷启动、暖启动和热启动的解释 GPS 启动时间是一个比较混乱的概念,如果不具备一定的 GPS 知识比较难以理解。本文将借助外文的一些解释,希望能够用比较简单的语言让 GPS 爱好者们加深认识。 热启动(Hot...
通过分析启动耗时,开发者可以定位可能导致延迟的代码段,进行优化,减少冷启动或热启动的时间。 电量消耗分析在电池寿命成为移动设备重要考量因素的今天尤为重要。开发者可以通过此工具追踪应用在不同操作下的电量...
Android 冷启动是一种技术,它可以让 app 在启动时快速展示启动界面,而不是等待 app 的主 Activity 启动完成。在 Android 中,冷启动是指在 app 启动时,系统会先加载启动界面,然后再加载主 Activity。这可以提高...
总的来说,通过自定义主题、设置透明背景和正确处理启动页图片,可以有效地解决Android App启动页白屏问题,提高用户体验。同时,还可以考虑优化应用的启动速度,减少冷启动时间,进一步提升用户满意度。
在工业自动化领域,KUKA机器人因其高效、精准和易用...总的来说,理解并掌握KUKA机器人示教器的关机冷启动步骤是每个操作员和维护人员必备的技能之一。通过遵循上述详细步骤,可以确保机器人系统的顺利重启和有效管理。