Android APP启动时白色(黑色)闪屏(主题不是NoTitleBar的闪屏上方有标题栏)后进入首页面
2016-06-15 11:25
330 查看
闪频的原因分析:App启动需要时间,在APP启动完成后才会出现我们设定的首页面,在启动之前则会显示主题样式的默认背景,一般默认的Theme会带标题栏,背景为白色,如果用户把theme设置为NoTitleBar则会出现纯白色闪频。
解决方法分析:通过
Theme 和 Style 避免 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 设置透明属性 给人程序启动慢的感觉,界面会一次性刷出来,刷新同步。
相关文章推荐
- Android onActivityResult获取返回值的用法
- Android Studio如何删除module
- Android 云笔记APP的实现
- ios学习路线—Objective-C(autoreleasepool)
- 微信开发:微信支付(PHP)
- HTML和iOS的交互,点击html中按钮,ios进行原生方法调用,及ios传值到HTML
- ios验证常用正则表达式的使用
- android 如何修改系统语言
- android material design之Snackbar(二)
- Android 文件或者文件夹删除工具类
- iOS程序启动原理
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
- 记录一下Quick-Cocos2dx-Community lua绑定C++自定义类遇到的问题
- 介绍几个移动web app开发框架
- 让UIViewController中的viewDidLoad和viewWillAppear各司其责
- iOS如何获得手机ip地址
- swift获取View所在ViewController的控制器对象
- IOS沙盒文件操作
- Android中生成二维码、扫描二维码并返回结果进行处理
- iOS开发 使用Xcode自带的Leaks