Android启动页出现白屏、黑屏的解决方案

历史原因

当系统启动一个APP时,zygote进程会首先创建一个新的进程去运行这个APP,但是进程的创建是需要时间的,在创建完成之前,界面是呈现假死状态的,这就很尴尬了,因为用户会以为没有点到APP而再次点击,这极大的降低用户体验,Android需要及时做出反馈去避免这段迷之尴尬。于是系统根据你的manifest文件设置的主题颜色的不同来展示一个白屏或者黑屏。而这个黑(白)屏正式的称呼应该是Preview Window,即预览窗口。

好了,现在我们明白了,Preview Window其实是为了提高用户体验而有意设定的。因此,其实如果不是强迫症,它可能并不是一个问题。

但是我猜大部分小伙伴应该是和我一样的强迫症患者:这么丑的黑屏怎么能出现在我的APP上呢???!!!

所以,下面我们就来聊聊这个问题的解决方案。

引言

目前app的设计思路,都会有一个启动页,来进行一些数据的初始化等一些比较耗时的操作,这就会造成启动页短暂的白屏或者黑屏(黑还是白取决于你的默认主题)。那么,如何解决这种问题的?今天介绍一种比较完美的解决方案:layer_list叠加层

如果你的启动页,是一张静态图片,那么这种方式非常适合你。

一般来说,启动页都不会很花哨,标准的都是一个logo+app名字,上下排列。类似于下图:

QQ音乐启动页

如果是这样的,那就是最简单的,找UI切几张logo+文字的图,按照x xx xxx放好,然后drawable文件夹中新建一个layer_splash.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 <!-- 整体的背景颜色 -->
 <item android:drawable="@color/white" /> <item>
 <!-- 中间的图片 -->
 <bitmap
  android:gravity="center"
  android:src="@drawable/icon_welcome"
  android:scaleType="center" />
</item>
</layer-list>

然后在你的清单文件中,给启动页Activity单独设置一个主题:SplashAppTheme,并在其中引用刚才新建的叠加层布局文件,大功告成!这种方式可以做到秒开,无需任何等待。

<style name="SplashAppTheme" parent="android:Theme">
  <item name="android:windowNoTitle">true</item>
  <item name="android:windowFullscreen">true</item>
  <item name="android:windowBackground">@drawable/layer_splash</item>
</style>

但是,如果你的启动页不是这种布局,而是类似于下图这种:

微博

上下布局,间隔较大,而且上下之间的布局不固定(根据机型屏幕大小自动适应),这种,该如何处理呢?UI妹纸又要求不能等比例放大显示,说那样很丑吧啦吧啦吧。。。

其实我们可以这样:把上下布局切开,然后就变成了这样:

splash_top

splash_bottom

我们的xml文件这样写:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 <!-- 整体的背景颜色 -->
 <item>
  <color android:color="@color/white" />
 </item>
 <!-- 顶部 -->
 <item>
  <bitmap
   android:gravity="top|center_horizontal"
   android:scaleType="center"
   android:src="@drawable/splash_top" />
 </item>
 <!-- 底部 -->
 <item>
  <bitmap   android:gravity="bottom|center_horizontal"
   android:scaleType="center"
   android:src="@drawable/splash_bottom" />
 </item>
</layer-list>

记得top 和 bottom要根据不同尺寸的启动页图片进行切割,这样就完美解决了各种分辨率屏幕的适配问题(包括平板)。

如果你的启动页比较简洁,和我说的这两种情况差不多,你完全可以不给启动页Activity设置布局文件(setContentView()),只使用叠加层作为布局显示。

如果你的app启动页比较花哨或者不规则,你也可以利用这种方式,增加一个比较简洁的app启动图片的叠加层布局,作为启动页的主题进行加载,启动初始化完了再进行页面的变化等操作,也可做到秒启动,不再忍受白屏或者黑屏。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

您可能感兴趣的文章:

  • Android app启动时黑屏或者白屏的原因及解决办法
  • Android编程中activity启动时出现白屏、黑屏问题的解决方法
  • Android中Splash应用启动白屏问题的解决方法
  • Android中使用Theme来解决启动app时出现的空白屏问题
  • Android的App启动时白屏的问题解决办法
  • 解决Android应用冷启动时出现的白屏问题的方法
  • Android 避免APP启动闪黑屏的解决办法(Theme和Style)
  • Android程序启动时出现黑屏问题的解决方法
  • Android优化之启动页去黑屏实现秒启动
(0)

相关推荐

  • 解决Android应用冷启动时出现的白屏问题的方法

    Android 应用冷启动时,需要从Application开始启动,加载时间就会比较长,容易出现白色或黑色闪屏,观察一下手机上一些 其他APP 比如 微信.京东等就不存在这个现象. 原因分析 分析一下原因,其实是跟闪屏Activity的主题有关,比如使用了Theme.AppCompat.Light.DarkActionBar主题的话,其中指定了windowBackground,所以背景就是白色的了. 复制代码 代码如下: <itemname="android:windowBackgroun

  • Android的App启动时白屏的问题解决办法

    Android的App启动时白屏的问题解决办法 在手机上调试后第一次启动后会等待很长时间白屏, 设置style样式,给activity加上设置的样式,完美解决 参考一下下面的代码.就可以解决(亲测好用) <style name="SplashTheme" parent="AppBaseTheme"> <!-- 将splash图片设置在这,这样这张图片取代白屏 --> <item name="android:windowBack

  • Android优化之启动页去黑屏实现秒启动

    前言 还记得之前我们写了一篇文章,基于RxJava实现酷炫启动页,然而当我们点击桌面图标启动APP时,有时会闪一下黑色背景,有时黑色背景时间还比较长,哎呀,难看死了,这个怎么办捏,别方,我们今天就来看看启动页的优化. 一.消除启动时的黑屏 点击桌面launcher图标启动APP,闪现的黑色背景其实是出现在我们看到界面第一帧之前.那我们就要想办法让这个黑色的背景变成用户喜欢看到的画面或者让它透明化.有了思路方法也就粗现了,我们有下面两种方案: 自定义WelcomActivity的Theme 说白了

  • Android编程中activity启动时出现白屏、黑屏问题的解决方法

    本文实例讲述了Android编程中activity启动时出现白屏.黑屏问题的解决方法.分享给大家供大家参考,具体如下: 默认情况下 activity 启动的时候先把屏幕刷成白色,再绘制界面,绘制界面或多或少有点延迟,这段时间中你看到的就是白屏,显然影响用户体验,怎么消除呢? 在 Activity theme 设置style 即可 <style name="AppTheme" parent="android:Theme.Light.NoTitleBar">

  • Android app启动时黑屏或者白屏的原因及解决办法

    1.产生原因 其实显示黑屏或者白屏实属正常,这是因为还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景. 示例: 2.解决办法 通过设置设置Style (1)设置背景图Theme 通过设置一张背景图. 当程序启动时,首先显示这张背景图,避免出现黑屏 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name=&qu

  • Android程序启动时出现黑屏问题的解决方法

    本文实例讲述了Android程序启动时出现黑屏问题的解决方法.分享给大家供大家参考,具体如下: 关于黑屏: 默认的情况下,程序启动时,会有一个黑屏的时期,原因是,首个activity会加载一些数据,比如初始化列表数据.向服务器发送请求获取数据等等. 去除方法: 1.在style里面添加一个style: <style name="ContentOverlay"parent="@android:style/Theme.Light"> <itemname

  • Android中Splash应用启动白屏问题的解决方法

    不久前项目开始了一段时间了,刚开始怀疑是Android Studio中新加入的Instant Run功能引起的,于是重新打release包后再次运行发现还是有这样的问题,突然想到了上次集成进来了云信,于是猜想可能的确是加入云信后Application里面初始化操作再加上HomeActivity主界面的一些初始化耗时操作引起的,于是我们想办法消灭白屏,有已下两种方案可参看: 1.在启动Activity的界面主题样式上加上这样的item <style name="Theme.Start&quo

  • Android 避免APP启动闪黑屏的解决办法(Theme和Style)

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

  • Android中使用Theme来解决启动app时出现的空白屏问题

    相信大多数人一开始都会对启动app的时候出现先白瓶或者黑屏然后才进入第一个界面,例如:SplashActivity.那这是什么原因造成的呢? <style name="Splash_Theme" parent="@android:style/Theme.NoTitleBar"> </style> 原因是我们给改Activity/Application设置的主题引起的,因为该主题相对应的windowBackground等背景被设置成了白色或者黑

  • Android启动页出现白屏、黑屏的解决方案

    历史原因 当系统启动一个APP时,zygote进程会首先创建一个新的进程去运行这个APP,但是进程的创建是需要时间的,在创建完成之前,界面是呈现假死状态的,这就很尴尬了,因为用户会以为没有点到APP而再次点击,这极大的降低用户体验,Android需要及时做出反馈去避免这段迷之尴尬.于是系统根据你的manifest文件设置的主题颜色的不同来展示一个白屏或者黑屏.而这个黑(白)屏正式的称呼应该是Preview Window,即预览窗口. 好了,现在我们明白了,Preview Window其实是为了提

  • 完美解决Android App启动页有白屏闪过的问题

    应用启动的时候有短暂的白屏,如图: 可以通过设置theme的方式来解决 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item

  • Android 启动页白屏解决方案

    当我们打开app的时候是不是会有一瞬间的白屏然后再进入主活动,虽然这并不会造成什么不好的后果,但是感觉用户体验就不是很好.像网易云音乐等等,打开一瞬间就显示了他们的loge,无缝衔接,没有白屏,怎么做到的呢? 一开始我的思路是这样的.可能是因为我们的主活动逻辑太多,所以加载会变慢,导致显示白屏.如果使用一个只显示一张本地图片的活动,那会不会就不会显示白屏了呢.话不多说我们尝试一下: Activity中的代码: /** * 启动页,显示倾旅的logo,停顿2秒后跳转 */ public clas

  • Android启动页优化之实现应用秒开

    Android 应用冷启动时,需要从Application开始启动,加载时间就会比较长,这段时间里,用户所能看到的就是"白屏"(这是因为默认的AppTheme的 android:windowBackground 默认是设置成白色的),因此我认为真正的启动页就应该是让用户点开应用时看到的不是"白屏",而是我们创建的一个页面,可以是一张图片.一段文字. 这样,不明真相的用户直观感觉到的就是,这个应用可以秒开. 1.首先在 drawable 目录下新建一个 splash_

  • Android启动页解决方案(推荐)

    启动页几乎成为了每个app的标配,有些商家在启动页中增加了开屏广告以此带来更多的收入.目前启动页的广告都有倒计时的功能,那么我们在倒计时的过程中能做些什么呢? 这篇文章主要包括以下两方面内容 集成腾讯广告联盟的SDK 启动页加载过程中,后台初始化数据 我们在设计启动页时的常规做法是建立一个Activity来加载开屏图片或者广告,作为程序的入口,那么在这个三到五秒时间内如果进行数据下载,当用户点击了跳过按钮或者计时结束了数据还没初始化完成,已经进入了主页面,而主界面刚好需要那些基础数据该如何? 因

  • Android启动页广告(腾讯广告联盟)解决方法及源码下载

    Android启动页广告(腾讯广告联盟) 启动页几乎成为了每个app的标配,有些商家在启动页中增加了开屏广告以此带来更多的收入.目前启动页的广告都有倒计时的功能,那么我们在倒计时的过程中能做些什么呢? 这篇文章主要包括以下两方面内容 集成腾讯广告联盟的SDK 启动页加载过程中,后台初始化数据 我们在设计启动页时的常规做法是建立一个Activity来加载开屏图片或者广告,作为程序的入口,那么在这个三到五秒时间内如果进行数据下载,当用户点击了跳过按钮或者计时结束了数据还没初始化完成,已经进入了主页面

  • Android启动页用户相关政策弹框的实现代码

    现在Android上架各大平台都要求App首页添加一个弹框,显示用户协议以及一些隐私政策,不然上架各大平台,现在就来简单的实现一下这个对话框 既然是一个对话框,那我们就先来简单的封装一个对话框,这样方便后续的一些修改: widget_user_dialog.xml <?xml version="1.0" encoding="utf-8"?> <androidx.appcompat.widget.LinearLayoutCompat xmlns:an

  • Android截屏SurfaceView黑屏问题的解决办法

    最近项目中有截屏的需求,普通的view截屏方法网上一搜一大把,但是SurfaceView截屏黑屏问题很多文章说的并不清楚,自己参考了一些别的博客,再加上自己的思考,算是找到了一种解决方案. 1.首先看我们一般是怎么用SurfaceView的 public class SuperSurfaceView extends SurfaceView implements SurfaceHolder.Callback { SurfaceHolder surfaceHolder; public SuperSu

  • Android实现启动页倒计时效果

    今天介绍一个很简单的倒计时动画,仿酷狗音乐的启动页倒计时效果,也是大多数APP在用的一个动画,来看看效果图: 整体的思路就是用一个平滑的帧动画来画圆弧就行了. 这篇文章学到什么? 了解属性动画ValueAnimator的用法 了解动画属性插值Interpolator,让动画过度得更自然 如何画圆弧 开始准备 新建一个类继承TextView,因为中间还有跳过的文本,所以选择用TextView来画个动起来的背景图. /** * 倒计时文本 */ @SuppressLint("AppCompatCus

  • 3389远程登录怎么优化才能解决蓝屏或者黑屏问题

    电脑中的windows系统会出现许多的问题,那是很正常的,就像是在远程登入时,出现蓝屏或者是黑屏的问题,所以今天就教大家怎么优化3389登录,解决问题!一去来看看吧! 优化3389登录,解决蓝屏黑屏等原因.下边看图文操作记录.: 先打开远程登录软件.或者CMD命令MSTSC.显示选项里边选择15位,位数越大,显示的图像越细腻,但是越卡,位数小的显示图像有些失真,15位的刚好.且不影响操作. 本地资源选项,远程计算贡声音:不要播放.磁盘驱动器,打印机,串口行,去掉勾.这些普通用户都用不上的.且占资

随机推荐