Android APP启动白(黑)屏解决方案(适用于App启动立即展现logo、版权等)

Android APP启动白(黑)屏解决方案(适用于App启动立即展现logo、版权等),第1张

Android APP启动白(黑)屏解决方案(适用于App启动立即展现logo、版权等)

我们要求在App启动时显示我们设置的启动页面,实测发现打开app的时候,会有短暂的1秒--2秒的白屏或者黑屏,然后才进入到程序界面。

简单高效的解决方悔粗凳案一:

1、使用layer-list制作背景样式

新建bg_start_pic.xml

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<!-- 设置整个屏幕背景为白色 -->

<item>

    <color android:color="@color/white" />

</item>

<!-- 中间logo -->

<item

    android:width="@dimen/dp_150"

    android:height="@dimen/dp_150"

    android:gravity="center">

    <bitmap android:src="碧旅@drawable/icon_splash_logo" android:gravity="center" />

</item>

<!-- 底部图表 -->

<item

android:bottom="10dp"

android:gravity="bottom|center_horizontal">

<bitmap android:src="@drawable/pic_banner_home" />

</item>

</layer-list>

2、修改凳茄styles.xml文件

增加SplashTheme主题

<style name="SplashTheme" parent="AppTheme">

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

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

</style>

3、修改AndroidManifest.xml

LauncherActivity使用StartAppTheme主题

<activity

            android:name=".LauncherActivity"

            android:label="@string/app_name"

            android:theme="@style/StartAppTheme" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

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

            </intent-filter>

 </activity>

之所以会显示黑屏或者白屏是因为还没加载到布局文件,就已经显示了window窗口启巧槐背景,黑屏白屏就是window窗口背景

设置style,在主题中加入以下属性:

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

如果是进入app的欢迎页出现这种情况还可以设置一个默认的背景图如下:

之后只需要在AndroidManifest.xml中设置改主题就可以了

android:theme="@android:style/Theme.Dialog" //Activity显示为对话框模式

android:theme="@android:style/Theme.NoTitleBar" //不显示应用程序标题栏

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" //不显示应用程序标题栏,并全屏

android:theme="Theme.Light " //背悄友景为白色

android:theme="Theme.Light.NoTitleBar" //白色背景并无标题栏

android:theme="Theme.Light.NoTitleBar.Fullscreen" //白色背景,无标题栏,全屏

android:theme="Theme.Black" //背景黑色

android:theme="宽大Theme.Black.NoTitleBar" //黑色背景并无标题栏

android:theme="Theme.Black.NoTitleBar.Fullscreen" //黑色背景,无标题栏,全屏

android:theme="Theme.Wallpaper" //用系统桌面为应用程序背景

android:theme="Theme.Wallpaper.NoTitleBar" //用系统桌面为应用程序背景,且无标题栏

android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" //用系统桌面为应用程序背景,无标题栏,全屏

android:theme="Theme.Translucent" //透明背景

android:theme="Theme.Translucent.NoTitleBar" //透明背景并无标题

android:theme="Theme.Translucent.NoTitleBar.Fullscreen" //透明背景并无标题,全屏

android:theme="Theme.Panel " //面板风格显示

android:theme="Theme.Light.Panel" //平板风格显示

AMS主要功能:

AMS是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作。还负责启动或杀死应用程序的进程。

WMS主要功能:

为所有窗口分配Surface。

管理Surface的显示顺序、尺寸、位置。

管理窗口动画。

输入系统相关:WMS是派发系统按键和触摸消息的最佳人选,当接收到一个触摸事件,它需要寻找一个最合适的窗口来处理消息。

PWS主要功能:

PMS 用来管理跟踪所有应用APK,包括安装,卸载,解析,控制权限等。谈搭激

SystemServer也是一个进程,包括AMS、PMS、WMS等等。

zygote意为“受精卵“。Android是基于Linux系统的,而在Linux中,所有含袜的进程都是由init进程直接或者是间接fork出来的,zygote进程也不例外。

App进程是用户点击桌面icon时,通过Launcher进程请求SystemServer,再调用Zygote孵化的。

①点击启动一个App,Launcher进程采用Binder IPC向ActivityManagerService发起startActivity请求;

②ActivityManagerService接收到请求后,向zygote进程发送创建进程的请求;

③Zygote进程fork出新的子进程,即App进程;

④App进程通过Binder IPC向sytem_server进程发起绑定Application请求;

⑤system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送scheduleLaunchActivity请求;

⑥App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息;

⑦主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate()等方法。

⑧到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结枝槐束后便可以看到App的主界面。

备注:

Launcher,PMS,Zygote,App进程是三个独立的进程,相互通信就需要使用进程间通信机制。与Zygote通信是使用的socket通信,Launcher,PMS,App进程间使用的是Binder机制。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12215724.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存