MTK-Android APP启动时瞬间闪现黑屏(Theme & Style)

闪屏原因:主要是我们启动Activity的时候,需要跑完onCreate和onResume;
Android系统需要处理一些数据后,才会显示。按照这种思路,是不是我把初始化的工作尽量减少就可以避免黑屏?
事实是,就算你onCreate啥都不做,仍然会闪一下黑屏,因为初始化解析界面时需要一定时间,下面是解决办法:

1、自定义Theme
设置背景图Theme
<style name="Theme.AppStartLoad" parent="android:Theme"> 
<item name="android:windowBackground">@drawable/ipod_bg</item> 
<item name="android:windowNoTitle">true</item> 
</style>

2、设置透明Theme
<style name="Theme.AppStartLoadTranslucent" parent="android:Theme"> 
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item> 
</style>

上面我定义了两种主题:
第一种Theme就是设置一张背景图。当程序启动时,首先显示这张背景图,避免出现黑屏。
第二种Theme是把样式设置为透明,程序启动后不会黑屏而是整个透明了,等到界面初始
化完才一次性显示出来。下面说说两种方式的优缺点:

主题1:程序启动快,界面先显示背景图,然后再刷新其他界面控件。给人刷新不同步感觉。
主题2:程序启动慢的感觉,界面一次性刷出来,刷新同步。

2、修改AndroidManifest.xml
为了使上面主题生效,我们需要设置一些Activity的Theme
<application
 android:allowBackup="true"
 android:icon="@drawable/ipod_icon"
 android:label="@string/app_name"
 android:launchMode="singleTask">

<!-- iPod主界面 -->
<activity android:name="com.apical.apicalipod.IPodMainActivity"
 <!-- 使用上面定义的样式 mythou-->
 android:theme="@style/Theme.AppStartLoad"
 android:label="@string/app_name" >
 
 <intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>
</activity>
//.....
</application>

可以在Activity里面增加上面自定义的样式。另外在Application里面增加也是可以的,而且是全局效果。
自定义Theme放在 /res/values/styles.xml 里面。如果没有这个文件,自己添加一个即可。
如果存在多个Activity切换,中间也可能会存在短暂黑屏问题。原因也是Activity启动的时候需要初始化加载数据,如果想避免这种情况,可以在你切换的Activity里面增加上面的样式。
上面两种样式都可以避免黑屏。可以实际测试一下你的程序选择一种效果。
这个只是把黑屏避免了,但是如果你程序初始化启动慢,还是会给人程序启动慢的感觉。需要自行优化程序初始化过程。
 
3、Theme属性详解
android:theme="@android:style/Theme.Dialog" //Activity显示为对话框模式
android:theme="@android:style/Theme.NoTitleBar" //不显示应用程序标题栏
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" //不显示应用程序标题栏,并全屏
android:theme="Theme.Light " //背景为白色
android:theme="Theme.Light.NoTitleBar" //白色背景并无标题栏
android:theme="Theme.Light.NoTitleBar.Fullscreen" //白色背景,无标题栏,全屏
android:theme="Theme.Black" //背景黑色
android:theme="Theme.Black.NoTitleBar" //黑色背景并无标题栏
android:theme="Theme.Black.NoTitleBar.Fullscreen" //黑色背景,无标题栏,全屏
android:theme="Theme.Wallpaper" //用系统桌面为应用程序背景
android:theme="Theme.Wallpaper.NoTitleBar" //用系统桌面为应用程序背景,且无标题栏
android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" //用系统桌面为应用程序背景,无标题栏,全屏
android:theme="Theme.Translucent" //透明背景
android:theme="Theme.Translucent.NoTitleBar" //透明背景并无标题
android:theme="Theme.Translucent.NoTitleBar.Fullscreen" //透明背景并无标题,全屏
android:theme="Theme.Panel " //面板风格显示
android:theme="Theme.Light.Panel" //平板风格显示

4、Theme和Style
Android里面除了Theme外还有Style,例如下面是Launcher里面配置workspace的一个Style
<style name="WorkspaceIcon">
 <item name="android:layout_width">match_parent</item>
 <item name="android:layout_height">match_parent</item>
 <item name="android:layout_gravity">center</item>
 <item name="android:gravity">center_horizontal</item>
 <item name="android:singleLine">true</item>
 <item name="android:ellipsize">marquee</item>
 <item name="android:textSize">12sp</item>
 <item name="android:textColor">#FFF</item>
 <item name="android:shadowRadius">2.0</item>
 <item name="android:shadowColor">#B0000000</item>
</style>

Style可以理解为一组属性集合,方便不同的View设置使用,我们在View里面使用Style的时候,跟使用Theme是一样的应用方法。那么Style和Theme有什么区别?

下面列出两者区别:
样式用在单独的View,如:Button、TextView等

主题通过AndroidManifest.xml中的<application>和<activity>用在整个应用或者某个 Activity,主题对整个应用或某个Activity存在全局性影响。

如果一个应用使用了主题,同时应用下的view也使用了样式,那么当主题与样式属性发生冲突时,样式的优先级高于主题。

上面就是通过Theme解决程序启动闪黑屏问题,并且讲解了Theme和Style,通过Theme配置,其实还可以做个欢迎页面。不过我们都希望程序启动速度越快越好,因此还是需要多多优化自己的程序。

时间: 2024-10-15 04:24:18

MTK-Android APP启动时瞬间闪现黑屏(Theme & Style)的相关文章

Android项目启动时短暂的黑屏白屏处理

刚从csdn转战51,这是在51写的第一篇博客 那么我们来谈谈这样一个问题.当你的项目需要用的欢迎界面有时候会出现短暂的黑屏或白屏,这样用户体验就不好了,所以今天教教大家如何处理这种问题. 其实,黑屏或者白屏是因为程序还没有加载布局就已经显示window窗口背景,而黑屏或者白屏就是window窗口背景.那么如何处理呢?看下面... public class LoadingActivity extends AppCompatActivity {          @Override       p

Android App 启动时显示正在加载图片(源码)

微信.QQ.天天动听等程序,在打开时显示了一张图片,然后跳转到相关界面.本文实现这个功能,其实很简单.... 新建两个Activity,LoadingActivity,MainActivity,将LoadingActivity设置为android.intent.action.MAIN.使用TimerTesk,或者Thread将LoadingActivity显示几秒后跳转到MainActivity界面. LoadingActivity: new Timer().schedule(new Timer

ubuntu(双硬盘双系统)启动时卡死或黑屏 或 启动后分辨率改不了的解决方法

(Ubuntu  18.04)系统启动后卡死,黑屏,或者分辨率改不了的问题都是显卡驱动引起的, 解决方法: 1.(如果已经卡死了,则强制关机)开机: 2.(在选择系统的界面)选择ubuntu高级选项,回车: 3.(在出现的两个模式中)选择恢复(recovery)模式,回车: 4.(在出现的众多选项中)选择grub,回车(你能看到貌似很牛逼的一行行代码跑过): 5.(上面的代码跑完之后应该能重新回到众多选项的界面)选择resume,回车进入系统. 进入系统后很有可能分辨率又出问题了,此时只要更换显

[FMX] Android APP 启动黑屏优化补丁

使用说明 *************************************************** Android APP 启动黑屏优化补丁 作者: Swish, YangYxd 2016.01.16 Version: 1.0.0 QDAC官方群: 250530692 *************************************************** [安装方式] 双击Setup.bat安装补丁文件(安装时会作备份) 双击Uninstall.bat可以恢复. [

Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法(转)

转载: Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法   首先感谢博主分享,本文作为学习记录 惊鸿一瞥 微信的启动页,相信大家都不陌生. 不知道大家有没有发现一个现象,微信每次启动的时候,是直接进入这个启动页面. 我的意思是,很多应用,往往会先白屏停顿一下后再进入启动页面(Splash).为了印证这一点,我把手机上所有的App都点了一遍.选几个例子 如下图: 微信:  斗鱼:  斗鱼和微信是直接进入了,他们的Splash页面. 知乎:  B站:  知乎和B站要先

Android app启动activity并调用onCreate()方法时都默默地干了什么?

Android app启动activity并调用onCreate() 方法时都默默地干了什么? 在AndroidManifest.xml文件中的<intent-filter>元素中有这么两句: <intent-filter>     <action android:name="android.intent.action.MAIN"/>     <category android:name="android.intent.categor

android开发 解决启动页空白或黑屏问题

遇到的情况: app启动时进入启动页时出现白屏页,然后大概一秒之后就出现了背景图片. 原因:app启动时加载的是windows背景,之后再加载布局文件的,所以开始的黑屏/白屏就是windows的背景颜色,因此我们只要在启动页设置windows背景颜色就好了,那么在哪里设置呢?  就是theme里面. 解决办法:参考:[Android Drawable 那些不为人知的高效用法] [Android 启动APP时黑屏白屏的三个解决方案] 首先看之前的布局文件xml写法 <?xml version=&quo

Android App启动画面的制作

安卓软件启动时,都会有一个全屏的带LOGO,软件名称,版本号的启动屏幕.这个屏幕是怎么做出来的呢!!下面就一步一步的来! 一.新建项目 打开eclipse,新建一个Android项目,不建Activity.这时就出现一个空白的项目. 1.新建Activity文件 点击项目管理里的res,进入layout,右键点击NEW->Project->Android->Android XML Layout File 按步骤新建一个Activity的XML文件 我是选择新建了一个RelativeLay

Android启动时闪一下黑屏或者白屏

1.设定主题,此主题为透明的,加入到res/values/styles.xml中: <style name="Theme.AppStartLoadTranslucent" parent="android:Theme"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle&qu