前几天Boss就反应说,机器每次启动程序都会闪一下黑屏,这个客户不接受。没办法,只能想想怎么解决,最后找到了下面的方法。闪黑屏的原因主要是我们启动Activity的时候,需要跑完onCreate和onResume才会显示界面。也就是说需要处理一些数据后,才会显示。按照这种思路,是不是我把初始化的工作尽量减少就可以避免黑屏?事实是,就算你onCreate啥都不做,仍然会闪一下黑屏,因为初始化解析界面时需要一定时间。下面是解决办法:

(PS:新建的QQ群,有兴趣可以加入一起讨论:Android群:322599434)  

1、自定义Theme

//Edited by mythou //http://www.cnblogs.com/mythou/
//1、设置背景图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就是设置一张背景图。当程序启动时,首先显示这张背景图,避免出现黑屏。第二种Theme是把样式设置为透明,程序启动后不会黑屏而是整个透明了,等到界面初始化完才一次性显示出来。下面说说两种方式的优缺点:

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

2、修改AndroidManifest.xml

为了使上面Theme生效,我们需要设置一些Activity的Theme

//Edited by mythou //http://www.cnblogs.com/mythou/
<applicationandroid:allowBackup="true"android:icon="@drawable/ipod_icon"android:label="@string/app_name"android:launchMode="singleTask"><!-- iPod主界面 -->
<activityandroid: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属性详解

//Edited by mythou //http://www.cnblogs.com/mythou/
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

//Edited by mythou //http://www.cnblogs.com/mythou/
  <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配置,其实还可以做个欢迎页面。不过我们都希望程序启动速度越快越好,因此还是需要多多优化自己的程序。

  本文转自:http://www.cnblogs.com/mythou/p/3196042.html

转载于:https://www.cnblogs.com/tianyaxue/p/3204535.html

【转】Android 避免APP启动闪黑屏(Theme和Style)相关推荐

  1. Android 避免APP启动闪黑屏的解决办法

    闪黑屏的原因主要是我们启动Activity的时候,需要跑完onCreate和onResume才会显示界面 前几天Boss就反应说,机器每次启动程序都会闪一下黑屏,这个客户不接受.没办法,只能想想怎么解 ...

  2. android启动画面白屏,Android app启动时黑屏或者白屏的原因及解决办法

    1.产生原因 其实显示黑屏或者白屏实属正常,这是因为还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景. 示例: 2.解决办法 通过设置设置Style (1)设置背 ...

  3. Android应用启动闪黑屏

    闪黑屏的原因主要是我们启动Activity的时候,需要跑完onCreate和onResume才会显示界面.也就是说需要处理一些数据后,才会显示.按照这种思路,是不是我把初始化的工作尽量减少就可以避免黑 ...

  4. android studio模拟手机黑屏,Android Studio 模拟器启动问题——黑屏 死机 解决方法...

    今天用了下Android Studio,出现了一些问题,现在将启动过程中遇到的问题和解决方案列出来,方便大家参考. 安装过程不多说,网上一搜一大把. 那直接说问题吧: 1. 无法启动,报错: Fail ...

  5. android listview 滑动黑屏,Android 跨进程启动Activity黑屏(白屏)的三种解决方案

    当Android跨进程启动Activity时,过程界面很黑屏(白屏)短暂时间(几百毫秒?).当然从桌面Lunacher启动一个App时也会出现相同情况,那是因为App冷启动也属于跨进程启动Activi ...

  6. App启动时黑屏问题

    问题:app启动时,会出现一会儿的黑屏或者白屏才进入Activity的界面显示 分析:黑屏或者白屏这里并不是不正常,而是还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗 ...

  7. Android 点击APP桌面图标启动时黑屏或者白屏

    问题:当APP添加了闪屏页后,可能会出现点击桌面图标启动APP时先黑屏或者白屏后,再显示闪屏页,不利于用户体验. 解决: 1.解决方法很简单,在APP的style资源文件中添加如下代码: <st ...

  8. 【Android】自定义theme解决进入app闪黑屏问题

    每次启动app时总会闪一下黑屏,时间很短,一闪而过但是还是可以看的很清楚,虽然不影响运行,但是用户体验性极差,效果如图. 初感觉是app加载的问题,网上查相关资料后,该问题出现还是跟Activity生 ...

  9. android app启动失败,Android应用App启动白屏(黑屏)问题解决

    Android应用App启动白屏(黑屏)问题解决 点击Android手机桌面的应用App icon图标后,Android启动这个应用,正常情况下会立即看到并进入到开发者自己写在MainActivity ...

最新文章

  1. 超声波测距测速升压可调中周倒车雷达变频器传感器1:10
  2. 设计模式实战 - 责任链模式
  3. Windows编程-- 用户方式中线程的同步---关键代码段(临界区)
  4. Linux系统资源监控--linux命令、nmon和spotlight
  5. conda init 关闭和重启shell_TP5实战源码 通过shell建立PHP守护程序
  6. android进程与线程详解三:AsyncTask
  7. Object Pools 喷泉效果实现
  8. 分布式缓存Redis应用场景解析
  9. Docker学习总结(41)——Docker Compose 的两种安装方式总结
  10. top -bcn -1
  11. Spring Cloud Gateway替代zuul作为API网关(一)
  12. HTML5期末大作业:我的家乡网站设计——可以根据百度百科更换家乡适用多数我的家乡
  13. java VM option
  14. 谷歌浏览器开发者模式
  15. PotPlayer设置最小化的快捷键
  16. 知识关联视角下金融证券知识图谱构建与相关股票发现
  17. PC设置切换Fn功能键
  18. hrbust 1865人类希望——kokoⅡ【思维】
  19. 逍遥模拟器获取服务器信息出错,逍遥模拟器不能连上网怎么办?两招解决问题...
  20. AD16常用命令高效编辑命令

热门文章

  1. 【转贴】CSS Sticky Footer: 完美的CSS绝对底部
  2. (进阶)LeetCode(766)——托普利茨矩阵(JavaScript)
  3. JavaScript学习(七)—元素节点的获取方式
  4. 怎么改路由器的密码?
  5. OnePlus是什么
  6. 当大家都不理解你的时候,就是你成就的捷径
  7. 整个线上营销_而言,最重要的是什么?
  8. 做餐饮服务员有前途吗
  9. 查理.芒格,谈投资的秘密
  10. 面试遇到职场PUA,只能说兄弟你还嫩了点