Android Splash界面解决白屏、黑屏等问题

原创 2016年08月30日 17:16:36

前言

我相信很多Android开发同学都遇到过这样的需求:

  1. 实现一个Splash界面,界面上有应用相关的背景图片和一个开始按钮.
  2. 点击按钮之后进入主页,以后用户再打开应用就不显示这个Splash界面了.

也相信很多同学都遇到了这样的困惑:

  • 第二次进入应用,尽管你在Splash界面已经直接跳转到首页了,但是还是有个白屏或者黑屏或者带ActionBar的白屏闪现一下.

如果你也遇到这个问题,那就继续阅读这篇文章,我带大家去分析和解决这个问题.


解决方案

这里我们先给出解决方案,然后再具体分析产生原因哈.避免分析的大段文字阻碍了同学学习的热情.

解决方案非常简单,一句话概括是:给Splash Activity设置一个主题,主题内容是:全屏+透明.

style.xml增加SplashTheme主题:

<style name="SplashTheme" parent="AppTheme">
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

AndroidManifest.xml中为SplashActivity配置主题:

<activity android:name=".activity.SplashActivity"
    android:theme="@style/SplashTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

经过如上配置,困扰你的白屏、黑屏、ActionBar屏应该都已经烟消云散了.为了知其然,并知其所以然,希望同学能继续跟我一起分析一下这些白屏产生的原因.


Activity组件的窗口启动过程

首先声明,本段内容大量参考了罗升阳老师的博客。为了方便理解,对其内容进行了压缩。如果侵权,我立刻删掉这段分析哈。

想要了解白屏产生的根源,就不得不去跟踪Activity组件的窗口启动过程。Activity组件在启动的过程中,会调用ActivityStack类的成语函数startActivityLocked方法。注意,在调用ActivityStack类的成语函数startActivityLocked方法的时候,Activity组件还处于启动过程中,即它的窗口尚未显示出来,不过这时候ActivityManagerService服务会检查是否需要为正在启动的Activity组件显示一个启动窗口。如果需要的话,那么ActivityManagerService服务就会请求WindowManagerService服务为正在启动的Activity组件设置一个启动窗口(ps:而这个启动窗口就是白屏的由来)。


1. ActivityStack.startActivityLocked

public class ActivityStack {
    // set to false to disable the preview that is shown while a new activity
    // is being started.
    static final boolean SHOW_APP_STARTING_PREVIEW = true;

    private final void startActivityLocked(ActivityRecord r, boolean newTask, boolean doResume) {
        final int NH = mHistory.size();

        int addPos = -1;

        // Place to new activity at top of stack, so it is next to interact
        // with the user.
        if (addPos < 0) {
            addPos = NH;
        }

        // Slot the activity into the history stack and proceed
        mHistory.add(addPos, r);

        if (NH > 0) {
            // We want to show the starting preview window if we are
            // switching to a new task, or the next activity's process is
            // not currently running.
            boolean showStartingIcon = newTasks;
            ProcessRecord proc = r.app;
            if (proc == null) {
                proc = mService.mProcessNames.get(r.processName, r.info.applicationInfo.uid);
            }
            if (proc == null || proc.thread == null) {
                showStartingIcon = true;
            }


        }
    }
}

未完待续…

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

android 预加载进程(页面跳转白屏或黑屏)

现象: 第一次从一个进程的activity跳转到另一个进程的activity,会先呈现出黑屏(或白屏)的现象,然后才是第二个activity的界面。这是因为第一次跳转的时候,需要先启动另一个进程,而...

Android实现沉浸式状态栏的那些坑

最近项目需要实现沉浸式的状态栏,其实我在之前就了解过Android的沉浸式,发现有些棘手就放弃了,但是此次是公司的项目需要的,就花了几天把这个问题搞定了,在此记录一下,并mark几个坑。 首先,沉浸...
  • brian512
  • brian512
  • 2016年08月02日 17:40
  • 11055

android设置启动splash图片(消除启动白屏)不使用Appcompat主题设置的方法

至于使用Appcompat包的情况下,看另外一篇文章。 http://blog.csdn.net/robert_cysy/article/details/72824513 设置方法: 一、设置Andr...

sqlite用命令来创建db数据库文件(初)

1.首先 从www.sqlite.org下载SQLite *.*.*的版本。。。。 2.本人用的是  解压之后里面就只有一个sqlite3.exe,此时可以用这个exe来创建数据库了。 ...

java file模糊匹配某文件夹下的文件并删除

package com.wyebd.gis; import java.io.File; /** * @Title: DelFiles.java * @Package com.wyebd....

带你重新认识:Android Splash页秒开 Activity白屏 Activity黑屏

严振杰带你重新认识:Android Splash页秒开,如何解决Activity白屏,如何解决Activity黑屏。本篇博客要剖析和解决的两个问题: 1. APP启动时白屏/黑屏、Activity打开...

Android开发之解决APP启动白屏或者黑屏闪现的问题,androidapp

Android开发之解决APP启动白屏或者黑屏闪现的问题,androidapp 在做搜芽的过程中,发现那个外包人缘做的不行,因为启动的时候会停顿,然后白屏一会,联想到几个月前我在我的三僚企业...

Android开发之解决APP启动白屏或者黑屏闪现的问题

在做搜芽的过程中,发现那个外包人缘做的不行,因为启动的时候会停顿,然后白屏一会,联想到几个月前我在我的三僚企业通信软件里面拉起9K-Mail的时候也会黑屏,所以决定学习一下。解决一下。这不,万能的网络...

解决启动Android应用程序时出现白屏或者黑屏的问题

一般情况下,启动页面通常是全屏的,而且会用一张图片来展示用户打开应用程序后第一眼看到的界面。在手机中点击应用程序的图标到应用程序显示完MainActivity的视图这个过程中,通常会用一到两秒的时间。...

Android 性能优化——解决应用启动白屏/黑屏问题

项目中遇到从桌面 launcher 的小图标冷启动 App 时会经常碰到白屏/黑屏的问题,大约几百毫秒,然后才会跳转到我们应用程序的第一个 Activity, 为什么会出现这种情况? 原因 当从桌...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android Splash界面解决白屏、黑屏等问题
举报原因:
原因补充:

(最多只允许输入30个字)