前言

我在开发App的时候,出现App在启动会出现短暂的黑/白闪屏现象。这样现象对用户的体验感是会产生不好的影响,于是我就研究这个现象的起因和解决办法。不负有心人,我在翻了很多博客,踩完坑之后找到起因和解决办法。

App启动页(Splash)黑/白闪屏现象的起因

1.第一种说法

当我们启动一个App的时候,系统会检查是否存在这样一个进程。如果这个进程不存在,就是冷启动。系统和App本身有很多工作需要处理,系统的服务会先检查startActivity中的intent的信息,然后在去创建进程,最后才是执行启动Acitivy的操作。而我们提到的App启动页(Splash)黑/白闪屏现象就是这样产生的。

2.第二种说法

其实启动页(Splash)还需要在其他地方进行默认配置

3.第三种说法

启动页的Activity中onCreate()-->setContentView()这个并不是发生在,windows绘制的第一步,系统会在执行这个步骤之前,先绘制窗体,这时候布局资源还没加载,于是就使用默认背景色。

//这种亮色系,造成白色闪屏<style name="ThemeSplash" parent="Theme.AppCompat.Light">
//这种暗色系主题,造成了黑色闪屏
<style name="ThemeSplash" parent="ThemeOverlay.AppCompat.Dark">

我的看法

系统在绘制页面加载布局之前,首先会初始化窗口(Window),而在进行这一步操作时,系统会根据我们设置的Theme来指定它的Theme 主题颜色,Window 布局的顶层时DecorView,StartingWindow显示一个空DecorView,我们在Style中的设置就决定了显示的是白屏还是黑屏(调用我们默认设置的App主题),我们需要给启动页设置一个自定义主题就可以了。默认主题是下图中的主题

解决办法:设置启动页(Splash)的Theme

设置启动页(Splash)的Theme分为两步,启动页设置了一个背景图片,这样就不会显示白色或着黑色了。这样就避免了黑白屏的问题,请看下面举例

(1)在AndroidManifest文件中设置

<activity android:name=".ui.activity.SplashActivity"android:screenOrientation="portrait"android:theme="@style/SplashTheme"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
</activity>

(2)在style文件中定义

<!--设置启动页的主题,防止黑屏(闪黑)或者白屏(闪白)--><style name="SplashTheme" parent="AppTheme"><!--去掉windowTitle--><item name="windowNoTitle">true</item><!--设置全屏状态--><item name="android:windowFullscreen">true</item><!--设置背景图片--><item name="android:windowBackground">@drawable/qdy</item><!--设置内容覆盖--><item name="android:windowContentOverlay">@null</item></style>

总结

这是我对App启动页(Splash)黑/白闪屏现象的解析。我有到网上去翻看资料,以下几篇博客对我的解析有办法,Android开发的同学也可以去看一下,献博文地址
https://blog.csdn.net/kenway090704/article/details/79041715
https://blog.csdn.net/u010074743/article/details/76461662
https://blog.csdn.net/zivensonice/article/details/51691136

Android开发——解析App启动页(Splash)黑/白闪屏现象相关推荐

  1. Android开发----实现应用启动页

    Android开发----实现应用启动页 写在前面: 本次实现参考糖心荷包蛋小姐姐的文章进行操作,小姐姐写的非常清楚,点击查看原文哦! 我再做个笔记. 流程步骤: Android开发----实现应用启 ...

  2. 浅识Flutter Android studio 设置APP启动页

    Flutter Android studio 设置APP名启动页 Android设置APP启动页 ios设置APP启动页 APP的应用一打开,启动应用程序后,进入主功能界面前会有一张图片或一段动画效果 ...

  3. Android开发固定app图标大小,Android和IOS开发图标、启动页尺寸

    最近项目在做android和ios的项目,设计师让我给出图标的尺寸,于是查了一下尺寸. 一.开发中的实际情况: 第一步:产品经理和UI设计师制定好UI规范,然后开始做图标做颜色做尺寸等一系列和APP界 ...

  4. android开发 时间倒计时的启动页,App启动页倒计时功能

    示例代码采用 RxJava + RxLifecycle + Data-Binding 模式编写 示例图: 话不多说,实现方式如下: 1.导入依赖库 ① RxJava: Reactive Extensi ...

  5. android dialog 隐藏状态栏_Flutter-最近搞了个项目-启动页Splash,Navigator.pop无法关闭Dialog...

    上一篇做了个总体简单记录总结 MonkeyLei:Flutter-最近搞了个项目(常用控件,第三方基本库)-底部导航,登录,启动画面,webview等 . 完事了后以为没什么事情,然后点击登录会显示加 ...

  6. android启动页广告图,一张图搞定APP启动页广告

    之前我们产品里的启动页比较简单,就是背景色加上我们的logo.slogan等,这种形式适配起来比较容易,把元素切出来交给开发写出来就行.最近由于运营的需求,我们需要在APP启动页展示广告,广告图更新频 ...

  7. 解决 Android APP 启动页白屏问题及如何实现全屏显示

    目录 一.白屏原因分析 二.解决白屏方案 方案一.提供 .png 背景图 方案二.使用 Layout-list 制作背景 1.  制作替代白屏的背景:bg_splash.xml 2. 将 bg_spl ...

  8. android打开app白色页面,完美解决Android App启动页有白屏闪过的问题

    应用启动的时候有短暂的白屏,如图: 可以通过设置theme的方式来解决 @color/colorPrimary @color/colorPrimaryDark @color/colorAccent t ...

  9. 产品策划三:App启动页的策划方案

    App启动页是指app在启东时需要加载必要的运行环境和配置,在这个过程中提示用户等待的一个过渡页面. 在产品经理眼里启动页是app给予用户重要的第一印象:也是App最重要的黄金页面之一,所有用户100 ...

最新文章

  1. Linux常用的基本命令01
  2. 985博导:如果符合这几条,你可能不适合读博!
  3. JavaScript学习(八十七)—流程控制语句的总结,超级详细!!!
  4. 今天完成了一个真正意义上完整的gridview数据表操作
  5. Mobileye单目测距
  6. Knockoutjs开发指南
  7. html flex上下居中,CSS3 Flex实现元素的水平居中和垂直居中
  8. android apk u盘升级_android升级安装包--包解析错误
  9. [源码阅读]解析Anime(JS动画库)核心(2)
  10. FPGA驱动VGA显示
  11. WordPress插件曝出零日漏洞,已被积极在野利用
  12. 【已解决】python 使用xlrd,xlwt 修改execl单元格的背景色
  13. 一位美国教授给研究生的怎样记读书笔记的建议(中文总结)
  14. 一种获取公网ip地址并发送邮件至指定邮箱的实现方法
  15. 物联网信号测试软件,物联网开关量信号采集 NPN转WIFI 检测计数器
  16. 【CSS】尺寸和边框、盒子模型、外边距_02
  17. 扫描电子显微镜基本构造
  18. 彻底解决不要脸的360更改浏览器主页【转载】
  19. three.js和D3.js
  20. 1496_关于约翰惠勒与费曼

热门文章

  1. python 报价机器人_用 Python3 写微信币价查询机器人
  2. 小牛叔讲Python第12章:面向对象类与实例(Class入门)
  3. 快速获取中国省市列表的JSON数据
  4. Python入门及进阶
  5. 【Zbrush教程】小白也能看懂的ZBrush基础教学,速看
  6. k8s下使用Ingress开启跨域(CORS)
  7. 波士顿机器人又有新花样,居然组团来斗舞!
  8. ISAR成像中的步进电机的设计想法
  9. HTTP(http+抓包Fiddler+协议格式+请求+响应)
  10. influxdb客户端简单使用