Android应用启动白屏处理方案详解

 更新时间:2023年02月27日 15:06:04   作者:似曾相识2022  
这篇文章主要为大家介绍了Android应用启动白屏处理方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

相信大家一定遇到过某些App在手机桌面打开时会出现短暂或者几秒钟的白屏情况吧,没错那是应用程序启动后系统默认的背景色,此时应用的第一个Activity还未被加载出来,所以不管怎么设置第一个Activity的背景色都毫无作用。但细心的朋友发现,有些App启动时白屏的时间又很短几乎可以忽略不计呢?今天就分享一篇关于App冷启动处理白屏时间过长的问题。

首先先聊一聊冷启动和热启动:

  • 冷启动

杀掉App,此时的App进程不存在于后台,启动时从Logo页面开始。

  • 热启动

App处于后台,进程未被杀死,重新进入前台时页面保持上一次页面,不会重新启动。

所以,我们此次所讲的属于冷启动过程,当应用程序代码量小、业务逻辑少、体积小时,App启动还是比较快,白屏时间可以忽略不计。一旦初始化工具过多,首页业务逻辑过多时启动速度会严重变慢,此时的白屏时间会越来越长,给人一种极差的体验。我们需要做的就是在白屏时间尽可能快速的展示Logo等图标,让它成为一个过渡,待应用程序准备好后跳转到相应页面以提高用户体验。

配置一个SplashActivity

首先,需要配置一个SplashActivity(应用展示的第一个Activity)的主题

<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- 将splash图片设置在这,这样这张图片取代白屏 -->
    <item name="android:windowBackground">@drawable/logo_drawable</item>
    <item name="android:windowAnimationStyle">@style/notAnimation</item>
    <!--将顶部状态栏设置为透明,并将界面内容布局上边界上提至状态栏顶部-->
    <item name="android:windowTranslucentStatus">true</item>
    <!--如果有底部虚拟导航栏,则将底部虚拟导航栏设置为透明,并将界面内容布局下边界下沉至虚拟导航栏底部-->
    <item name="android:windowTranslucentNavigation">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">true</item>
</style>

其中windowBackground是我们本次重点配置,windowAnimationStyle是取消页面的一些动画效果,一般首页我们让它无动画,其他设置根据自己情况设置即可。

让我们来看看logo_drawable

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <color android:color="#ffffffff"/>
    </item>
    <item
        android:top="208dp"
        android:bottom="453dp">
        <bitmap
            android:gravity="center"
            android:src="@mipmap/ic_logo" />
    </item>
</layer-list>

白色背景上叠加一个bitmap,这里需要注意的是bitmap外层的item标签一定要根据设计稿配置好上下边距,否则运行App后的效果会被铺满屏幕。

然后我们将上面的主题配置到activity中,此时SplashActivity的布局文件中可以什么都不写,因为该主题就相当于背景,如果此处编写页面可能会和背景logo重合,仅需要编写一些逻辑和跳转处理。

<activity
    android:name=".ui.splash.SplashActivity"
    android:configChanges="orientation|screenSize"
    android:exported="true"
    android:launchMode="singleTop"
    android:screenOrientation="portrait"
    android:theme="@style/SplashTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

至此,再次运行打开App发现,几乎点开就是我们配置的logo,完美处理白屏问题。

注意:

如果项目使用了UI适配的三方库,例如androidAutoSize,一定记得根据文档处理放弃启动页适配,否则运行出来的效果也是不如意。

总结

白屏处理其实就是通过主题配置一个背景,在加载页面时会首先显示该背景,无需渲染页面,所以App打开就能很快展示Logo,一般延迟一两秒再跳转首页达到一个良好的用户体验。

以上就是Android应用启动白屏处理方案详解的详细内容,更多关于Android启动白屏处理的资料请关注脚本之家其它相关文章!

相关文章

  • Flutter 用自定义转场动画实现页面切换

    Flutter 用自定义转场动画实现页面切换

    本篇介绍了 fluro 导航到其他页面的自定义转场动画实现,Flutter本身提供了不少预定义的转场动画,可以通过 transitionBuilder 参数设计多种多样的转场动画,也可以通过自定义的 AnimatedWidget实现个性化的转场动画效果。
    2021-06-06
  • Android自定义Dialog的方法实例

    Android自定义Dialog的方法实例

    所有的对话框,都是直接或间接继承自Dialog类,下面这篇文章主要给大家介绍了关于Android自定义Dialog的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Android实现画板功能(二)

    Android实现画板功能(二)

    这篇文章主要为大家详细介绍了Android实现画板功能的第二篇,使用imageView,bitmap方式实现画板,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • Android-Okhttp的使用解析

    Android-Okhttp的使用解析

    okhttp是Android6.0推出的网络框架。这篇文章主要介绍了Android-Okhttp的使用解析,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • Android中ContextMenu用法实例

    Android中ContextMenu用法实例

    这篇文章主要介绍了Android中ContextMenu用法,实例分析了Android上下文菜单ContextMenu的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Android 判断屏幕开关状态方式总结

    Android 判断屏幕开关状态方式总结

    这篇文章主要介绍了Android 判断屏幕开关状态方式总结的相关资料,需要的朋友可以参考下
    2016-10-10
  • Android线程管理之ActivityThread

    Android线程管理之ActivityThread

    线程通信、ActivityThread及Thread类是理解Android线程管理的关键。通过本文给大家介绍Android线程管理之ActivityThread 的相关知识,对android线程管理相关知识感兴趣的朋友一起学习吧
    2016-01-01
  • Android实现手势滑动多点触摸缩放平移图片效果

    Android实现手势滑动多点触摸缩放平移图片效果

    这篇文章主要介绍了Android实现手势滑动多点触摸缩放平移图片效果,实现图片支持多点触控,自由的进行缩放、平移的注意事项,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • Android studio保存logcat日志到本地的操作

    Android studio保存logcat日志到本地的操作

    这篇文章主要介绍了Android studio保存logcat日志到本地的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Android 5.0+ 屏幕录制实现的示例代码

    Android 5.0+ 屏幕录制实现的示例代码

    这篇文章主要介绍了Android 5.0+ 屏幕录制实现的示例代码,从 5.0 开始,系统提供给了 app 录制屏幕的一系列方法,不需要 root 权限,只需要用户授权即可录屏,相对来说较为简单,感兴趣的小伙伴们可以参考一下
    2018-05-05

最新评论