之前在做 APP 的时候不太关注这个问题,因为自己在使用其他 APP 的时候也会在应用启动的初始有一个黑屏闪过后才会出现应用的欢迎页。直到最近开发过程中发现自己在欢迎页启动的线程由于请求和处理的数据量过大而,导致欢迎页在出现之前界面上会有一个短暂的白色闪屏停留,当然白色闪屏的停留是因为 application 的主题样式 android:theme="@style/AppTheme" 使用了 Theme.Light 题导致的,Light 样式的 windowBackground、colorBackground、colorForeground 等属性的值均为 light 也就是白色偏亮,所以才会出现白色闪屏。下面是我的 APP 出现白色闪屏时样式引用的代码:

   <style name="AppTheme" parent="android:Theme.Light">

   </style>

简单的修改后,闪屏颜色为黑色,代码如下:

   <style name="AppTheme" parent="android:style/Theme.Black.NoTitleBar.Fullscreen">

   </style>

代码修改后引用的样式为黑色主题,但欢迎页仍然会有黑色闪屏短暂的停留。继续进行修改,设置透明属性为 true,代码如下:

    <style name="AppStartTheme" parent="android:style/Theme.Black.NoTitleBar.Fullscreen">
<item name="android:windowIsTranslucent">true</item>
</style>

经过这次的修改之后黑色闪屏现象消失了,最终达到了自己理想的效果。最后,经过查阅资料发现已经有人总结和处理过这类问题了,并且给出了优缺点的分析,我在这里以我的理解对其进行引用。

原来避免黑色闪屏有2种方法,分别为:1.为 Theme 设置背景图;2.为 Theme 设置透明属性。显然我采用的是第二种方式,先分别看看这2种方式所引用的代码:

    <!-- 为 Theme 设置背景图 -->
<style name="AppStartTheme" parent="android:Theme">
<item name="android:windowBackground">@drawable/splash_bg</item>
<item name="android:windowNoTitle">true</item>
</style>
    <!-- 为 Theme 设置透明属性 -->
<style name="AppStartTheme" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
</style>
    <!-- 为 Activity 设置 Theme -->
<activity
android:name="com.sunzn.act.SplashActivity"
android:label="@string/app_name"
android:theme="@style/AppStartLoadTranslucent"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

上面的2种 Theme 中,为 Theme 设置背景图后程序在启动的时候,会首先显示这张图,避免发生黑屏;为 Theme 设置透明属性,程序启动后不会黑屏而是透明,等到界面初始化完成后才一次性显示出来。下面是两种方式的优缺点:

  • 为 Theme 设置背景图       给人程序启动快的感觉,界面先显示背景图,然后再刷新其他界面控件,刷新不同步。
  • 为 Theme 设置透明属性    给人程序启动慢的感觉,界面会一次性刷出来,刷新同步。

最新文章

  1. HTML 接收本地文件
  2. Html5 Egret游戏开发 成语大挑战(一)开篇
  3. java访问webservce,保持会话,服务端保存session验证
  4. Dataguard后台进程解析
  5. android常用http框架介绍
  6. 点击页面其它地方隐藏该div的两种思路
  7. openwrt拦截snmp报文
  8. LoggerOne
  9. 用PULL解析器解析XML文件
  10. Shell脚本中获取select值
  11. Python常见的问题
  12. js switch 字符串
  13. 以太坊上发行ERC20代币
  14. koa2学习笔记
  15. 分解数据表(将一个datatable按数据量分隔成多个table)
  16. 如何绘制UML图?
  17. Berlekamp-Massey算法学习笔记
  18. django项目中在settings中配置静态文件
  19. 使用nginx统一代理dashboard,grafana,Prometheus二级目录访问
  20. 下载企业级证书打包的app 出现“正在下载”或“等待中”的图标并且无法删除的问题

热门文章

  1. 【laravel5.* + 钉钉实现WEB第三方登录】 使用redis 作为持久化存储
  2. Dockerfile 构建后端springboot应用并用shell脚本实现jenkins自动构建
  3. Swift与C类型对应关系表
  4. 有关memcached企业面试案例讲解
  5. NFS客户端、服务器协商读写粒度(rsize、wsize)流程 【转】
  6. 自由是有代价的:聊聊这几年尝试的道路 要想生活好,别看哲学书和思想书。简单看看可以,看多了问题就大了。还是要去研究研究些具体的问题。别jb坐在屋子里,嘴里念着海子的诗,脑袋里想康德想的事情,兜里屁都没有,幻想自己是大国总理,去想影帝是怎么炼成的。
  7. CMFCPropertyGridProperty用法
  8. block(八)作用域
  9. 实现一个简单的android开关
  10. Objective-C 如何让非等宽的数字和空格对齐