之前在做 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. 长聚微嵌 DMA-210U Android(安卓)入门第一天------烧写uboot、ke
  2. android 屏蔽指定activity启动(程序锁)
  3. android一些常用基础UI控件(比较适合给新手参考)
  4. 如何查看Android设备中的启动服务
  5. Android(安卓)Native 程序逆向入门(一)—— Native 程序的启动流程
  6. Android开发:APP引导页启动页小Demo(实例)
  7. android中自定义控件之TitleBar实现
  8. 【Android进阶学习】设置透明效果的三种方法
  9. android自定义属性三部曲

随机推荐

  1. Cloudam云端云E算力平台在人工智能模型训
  2. IDEA激活码注册码密钥,2021年最新永久激活
  3. [灾备]归档和快照技术
  4. 案例 | Zabbix如何为中国铁路动车组WiFi
  5. [灾备]通过 NAS 与文件服务器结合构建数
  6. 03-K8s部署安装配置nginx-ingress和配置
  7. [灾备] 常见存储形态及架构
  8. [灾备] 数据副本管理技术(CDM)
  9. 3.10c语言自学
  10. Oracle归档日志满错误(ORA-00257)