Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法 您所在的位置:网站首页 诺基亚白屏怎么回事 Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法

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

2024-07-11 14:01| 来源: 网络整理| 查看: 265

惊鸿一瞥

微信的启动页,相信大家都不陌生。 不知道大家有没有发现一个现象,微信每次启动的时候,是直接进入这个启动页面。 我的意思是,很多应用,往往会先白屏停顿一下后再进入启动页面(Splash)。为了印证这一点,我把手机上所有的App都点了一遍。选几个例子 如下图: 微信: 这里写图片描述 斗鱼: 这里写图片描述 斗鱼和微信是直接进入了,他们的Splash页面。 知乎: 这里写图片描述 B站: 这里写图片描述 知乎和B站要先进入一个白屏,特别是B站,白屏后再进入的Splash页面。

动手实现 想一想,如果让我们自己来写一个Splash页面怎么实现? 创建SplashActivity样式,我们需要他是启动界面,固定垂直方向,全屏显示 设置主题为ThemeSplash @android:color/white true true false //一定要,否则有状态栏显示,不能全屏 true 设置SplashActivity的布局文件 activity_splash.xml为背景图片的全屏显示

4.设置SplashActivity代码,延迟2秒跳转到MainActivity

public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); //延迟2S跳转 new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(SplashActivity.this, MainActivity.class); startActivity(intent); finish(); } }, 2000); } }

这里写图片描述 糟糕,出现了白屏。 而且不止这个应用,把以前写的几个应用都打开看了下,都有出现黑白屏的现象,斗鱼不闪屏

看看斗鱼怎么做的

使用apktool打开斗鱼

>E: >cd E:\Android\反编译\apktool E:\Android\反编译\apktool>apktool d E:\Android\Blog\douyu.apk

先看他的配置清单文件

因为是程序入口,很快找到,使用了android:theme="@style/Theme.AppLauncher",那么看看他的样式Theme.AppLauncher怎么实现的

@drawable/bg_splash

**看到这里,我们发现他居然把@drawable/bg_splash设置成了窗口背景,而这张叫bg_splash的图片就是他们的启动图片(我们的App已经拿过来用了),继续往下看 。 找到他的SplashActivity布局文件,在他的res目录,根据命名规则他多半使用splash做关键字,搜索 这里写图片描述 打开

几个关键词 进入 、@drawable/start_icon_anim、@drawable/splash_ad_logo这不就是最开始,进入的广告页面么: 这里写图片描述 只不过,他的这张图的大图背景,没有配置,很可能是网络获取的。

到这里,我们大致已经清楚了,斗鱼启动是怎么个逻辑

把启动图bg_splash设置为窗体背景,避免刚刚启动App的时候出现,黑/白屏设置为背景bg_splash显示的时候,后台负责加载资源,同时去下载广告图,广告图下载成功或者超时的时候显示SplashActivity的真实样子随后进入MainAcitivity 据我观察,淘宝启动的时候和斗鱼逻辑是一样的,有兴趣可以探究下。 到这里,偷师成功,我们可以回来改自己的程序了。 @mipmap/bg_splash true true false true

这里写图片描述 好的已经不闪屏了。

为什么会这样

最后,思考一下这个问题,为什么会出现这种情况,在启动Acitivty的onCreate()方法里面,执行setContentView(R.layout.activity_splash);出现白屏。 设想,onCreate---setContentView这个并不是发生在,窗体绘制的第一步,系统会在执行这个步骤之前,先绘制窗体,这时候布局资源还没加载,于是就使用默认背景色。

这种亮色系,造成白色闪屏

这种暗色系主题,造成了黑色闪屏

代码地址:https://github.com/zhouruikevin/makeapp



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有