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

作者:似曾相识2022 时间:2022-06-24 23:09:18 

相信大家一定遇到过某些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,一定记得根据文档处理放弃启动页适配,否则运行出来的效果也是不如意。

来源:https://juejin.cn/post/7203730887787053111

标签:Android,白屏处理
0
投稿

猜你喜欢

  • 从内存地址解析Java的static关键字的作用

    2022-03-18 03:49:26
  • Android BadTokenException异常解决案例详解

    2022-04-08 16:10:59
  • Windows下gradle的安装与配置的超详细教程

    2023-08-27 17:01:50
  • 解决JAVA遍历List集合,删除数据时出现的问题

    2021-12-25 15:38:03
  • Mybatis 如何传入字符串参数,分割并遍历

    2021-10-08 01:14:45
  • Java 线程的生命周期完整实例分析

    2023-06-27 12:52:26
  • 深入解析Java的Hibernate框架中的一对一关联映射

    2022-08-07 22:23:39
  • C语言malloc分配问题详解

    2023-07-22 05:10:34
  • Java快速入门掌握类与对象及变量的使用

    2021-10-14 04:49:13
  • 解决C#全屏幕截图的实现方法

    2023-10-25 00:41:15
  • Android相册效果(使用C#和Java分别实现)

    2022-08-21 15:19:10
  • Java中switch的三种用法方式小结

    2023-11-24 03:40:21
  • Android实现弹出登陆框的方案

    2021-09-03 06:52:36
  • Android BaseAdapter适配器详解用法

    2022-07-09 03:59:52
  • Java泛型定义与用法实例详解

    2023-11-25 11:50:28
  • android工程下不能运行java main程序的解决方法

    2023-06-23 21:54:08
  • 一款适用于Android平台的俄罗斯方块

    2023-02-25 02:38:35
  • 详解spring boot配置单点登录

    2022-07-27 11:50:11
  • 详解用Spring Boot Admin来监控我们的微服务

    2022-02-12 15:18:03
  • java实战之桌球小游戏

    2022-04-22 20:40:13
  • asp之家 软件编程 m.aspxhome.com