APP启动黑白屏优化

开发Android的程序员都知道,自己开发APP时候,如果不做任何处理,在用户打开应用时总会先出现黑屏或者白屏,之后才进入MainActivity中。这是加载程序时间过长造成的。具体的启动原理我就不再这里叙述了,可以百度一下,很多博客讲的都很清楚。我这里只说主要的部分。简单来说,从用户点击应用时,程序会执行Application的onCreate和Activity(入口Activity)的onCreate,之后才进行界面的展示。所以说呢,我们尽量要减少onCreate方法中程序的执行,能进行懒加载的要进行懒加载;可以放在子线程中执行的要放在子线程中。这样可以使白屏时间减少。但是现在应用需要接入大量的三方,而且都要求方法Application中的onCreate方法中,导致优化onCreate的方法的行为很少了。那应该怎么办呢?

现在很多应用当点击的时候都不会出现黑白屏,而是先出现一个自定义的页面,过了不定时长之后进入应用内。这个方法就是很好的解决办法。具体怎么实现呢?

 

1.定义自己的主题风格

首先我们在style.xml文件中定义自己的主题,在android:windowBackgroud属性中写上替代白屏的图片。

<style name="AppTheme.MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/welcom_icon</item>
        <item name="android:windowFullscreen">true</item>
</style>

2.给入口Activity设置刚刚定义的主题

<activity
      android:name=".MainActivity"
      android:theme="@style/AppTheme.MyTheme">
      <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
</activity>

之后再在MainActivity中的onCreate方法中设置原本的主题进行恢复

setTheme(R.style.AppTheme)

再次启动App之后就会方法,自己替换的图片代替了黑白屏。

有的小伙伴会发现,由于手机尺寸不同,图片出现变形,造成的用户体验很不好。应该如果做呢?

1.创建drawable文件

需要注意的是,gravity需要设置为center

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/app_welcome"/>
    </item>
</layer-list>

2.使用刚刚创建的drawable文件

<style name="AppTheme.MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/my_drawable</item>
        <item name="android:windowFullscreen">true</item>
</style>

之后的操作和上面的一样。图片的大小和图片的位置(mipmap-hdpi,mipmap-xhdpi等)会影响图片的显示。这个图片我建议方法mipmap-xxhdpi中,大小为1080*1920。其中核心内容要小一点,边距留的大一点,这样适配的效果会很好。

其他内容:

还有两种方式也可以替代黑白屏的显示,那就是不让黑白屏展示出来。以下代码在自定义的主题中添加,替代android:windowBackground

<item name="android:windowIsTranslucent">true</item>

<item name="android:windowBackground">@null</item>
<item name="android:windowDisablePreview">true</item>


如果应用开始的延迟时间过长的话,点击应用没有任何反应,等加载完成之后直接进入应用。不会有黑白屏,也没有自己的图片。其实就是让黑白屏透明。这两种方法第二种要比第一种的内存消耗要小一点,第一种只是隐藏了黑白屏,但是依然会在内存中加载,第二种则不会加载内存。

关于黑白屏的问题就说到这里,欢迎评论,欢迎纠错!

猜你喜欢

转载自blog.csdn.net/qq_32019367/article/details/89491269