Android专题Android笔记本

Android启动APP时黑屏白屏解决

2019-01-29  本文已影响135人  GerDScarlet

在开发过程中我们发现在启动有些app的时候,出现短时间黑屏或者白屏闪烁之后进入开屏页面,但是有些app在启动的过程中没有这种现象,因此要处理这个问题,我们首先要找出为什么会出现这种情况。

其实在应用的启动过程中,会去加载布局文件,如果布局文件比较复杂或者嵌套层级较多的情况下,会出现这种黑白屏闪烁的情况,主要是因为在还没加载到布局文件的时候,先显示window窗口背景,黑屏白屏就是window窗口背景。我们可以通过代码模拟这种场景。便于理解

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 注意:添加3秒睡眠,以确保黑屏一会儿的效果明显,在项目应用要去掉这3秒睡眠
try {
    Thread.sleep(3000);
} catch (InterruptedException e) {
    e.printStackTrace();
}
// 在这里之前,黑屏或者白屏都是window的背景颜色,是窗口背景,还没到界面的布局呢,要执行setContentView后才显示布局
setContentView(R.layout.activity_launcher);
}

那window窗口背景在那里提供呢?在提供theme里面,如下提供的是白色背景,那就是启动时白屏一会儿的颜色设置。

  <!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@color/white</item>
<!-- All customizations that are NOT specific to a particular API-level can go here. -    ->
</style>

所以,在theme设置windowBackground就可以解决启动时白屏黑屏一会儿了。

下面是解决方法:
思路:给启动页设置一个和启动页样式相同的背景。
步骤:4步

1,在drawable目录下新建一个根节点为layer-list的xml文件,如launch.xml,在xml中做出和开屏图一样的效果,我的开屏图是由两个ImageView拼接的,因此我的layer-list类似如下(根据自己的开屏图对应编写自己的launch.xml文件)。

 <?xml version="1.0" encoding="utf-8"?>
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@color/white_FFFFFF"></item>
   <item android:bottom="@dimen/len_100dp">
        <bitmap
            android:src="@drawable/launch_view_bg"
            android:tileMode="disabled" />
   </item>
    <item
    android:height="@dimen/len_100dp"
    android:gravity="bottom">
    <bitmap
        android:gravity="bottom"
        android:src="@drawable/splash_bottom_logo" />
    </item>
</layer-list>

2,给开屏Activity设置主题,并设置背景属性windowBackground为launch.xml

<style name="StartAppTheme" parent="Theme.AppCompat.Light.NoActionBar">

<item name="android:fitsSystemWindows">false

<item name="android:windowNoTitle">true

<item name="android:windowIsTranslucent">false

<item name="android:windowFullscreen">true

<item name="android:windowBackground">@drawable/launch

</style>

3,在开屏页中设置全屏和状态栏透明

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

4,华为刘海屏兼容(在清单文件中设置给开屏activity)

<meta-data android:name="android.notch_support" android:value="true"/>

通过以上四个步骤,能消除应用启动过程中的黑白屏闪烁问题,并实现在未加载出启动页布局前展示windowbackground与加载成功启动页之间的无感切换。

上一篇下一篇

猜你喜欢

热点阅读