搜索
首页php教程php手册启动页进入时有短暂黑屏或白屏现象的终极解决方案

irontec 推出了一个开源项目 PHP for Android (PFA),把php带到Android平台上。现在我们来介绍一下。

问题描述

在安卓项目开发中,我们在启动app的时候,屏幕会出现一段时间的白屏或者黑屏,不同设备时间长短不同。很影响用户体验,所以我们很有必要对其进行优化。

黑白屏问题出现的原因

当我们启动一个APP时,如果该app所属的Application还没有在后台运行的话,系统会首先创建一个新的进程去运行这个APP,但进程的创建与初始化都是需要时间的,在这个动作完成之前,如果初始化的时间过长,屏幕上可能没有任何动静,用户会以为没有点到APP而再次去点击应用图标,这极大的降低了用户体验,因此Android需要及时做出反馈去响应用户的点击启动动作,这就有了StartingWindow(也称之为PreviewWindow的预览窗口)的出现,这样看起来就像App已经启动起来了,只是数据内容还没有初始化好。

StartingWindow一般出现在应用程序进程创建并初始化成功前,目的是告诉用户,系统已经接受到操作,正在响应,在程序初始化完成后绘制好启动页UI,会同时移除这个窗口,所以他只是一个临时的窗口。

一般情况下我们会对Application和Activity设置Theme,系统会根据设置的Theme初始化StartingWindow。Window布局的顶层是DecorView,StartingWindow显示一个空DecorView,但是会给这个DecorView应用这个Activity指定的Theme中设置的背景色,如果这个Activity没有指定Theme就用Application的Theme(Application系统要求必须设置Theme),我们在Style中的设置就决定了显示的是白屏还是黑屏,如下:

<application        // ....
        android:theme="@style/AppTheme">

如果我们的AppTheme像如下定义的一样使用了Light主题,那么显示就是白屏,反之如果使用Black主题,那么显示就是黑屏:

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

解决方案

1、首先在res/drawable下新建一个layer-list,名字随便取,比如splash.xml:
layer-list的编写参考:https://www.jb51.net/article/130850.htm

<?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/wel_page" />
    </item></layer-list>

layer-list大家都会写吧,上面是背景颜色,下面是一张图,这张图可以是全屏的图,可以是一张小图。如果是全屏的图,那上面的颜色也可以不用设置,如果是小图,就要指定下颜色了,并且可以指定图片所在位置。

2、给主题设置Window背景:可以用我们上面的layer-list作为背景,当然也可以设置个全屏的图片。

<style name="SplashTheme" parent="AppBaseTheme">
    <!-- 欢迎页背景引用刚才写好的 -->
    <item name="android:windowBackground">@drawable/splash</item>
    <item name="android:windowFullscreen">true</item>
    <!-- <item name="android:windowIsTranslucent">true</item> --> <!-- 透明背景不要了 --></style>

3、在AndroidManifest.xml中定义SplashActivity的theme为SplashTheme:这里注意application使用的theme是AppTheme,而SplashActivity使用的主题是SplashTheme。这样做的效果是只要SplashActivity使用StartAppTheme主题,其他Activity都是用AppTheme主题哦。

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

4、SplashActivity的实现,在onCreate()中直接启动你的MainActivity即可,没有setContentView():

public class SplashActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // setContentView(R.layout.activity_load_sir);
        new Handler().postDelayed(new Runnable() {            @Override
            public void run() {
                Intent intent = new Intent(SplashActivity.this,MainActivity.class);
                startActivity(intent);
                finish();
            }
        }, 3000);
    }
}

扩展

在上面第二步中提到可以不使用layer-list,直接设置背景为图片,但是不推荐使用直接使用.png图片作为背景的方式,因为屏幕尺寸太多,图片显示会变形,如果可以我们也可以使用.9.png的背景图来实现,但是使用图片的方式存在一个缺陷就是splash图片是写在theme中的,图片的内存释放不掉,而使用layer-list比较节省内存。

相关推荐:

PHP for Android项目

Android Animation_html/css_WEB-ITnose

以上是启动页进入时有短暂黑屏或白屏现象的终极解决方案的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具