Android启动性能优化——闪屏及Splash页

Android启动性能优化——闪屏及Splash页Android 启动性能优化 闪屏及 Splash 页本文我们将分析如何使用系统闪屏和 Splash 页来提升 APP 的启动性能 闪屏闪屏页是什么 启动闪屏不仅仅可以作为品牌宣传页 还能够减轻用户对启动耗时的感知 但是如果使用不恰当 将适得其反 当点击桌面图标启动 APP 的时候 程序会显示一个启动窗口 一直到页面的渲染加载完毕 如果程序的启动速度足够快 我们看的闪屏窗口停留显示的时间则会很短 但是当程序启动速度偏慢的时候 这个启动闪屏可以一定程度上减轻用户等待的焦虑感 避免用户过于轻易的关闭应用

Android启动性能优化——闪屏及Splash页


本文我们将分析如何使用系统闪屏和 Splash 页来提升 APP 的启动性能。

闪屏

闪屏页是什么?

启动闪屏不仅仅可以作为品牌宣传页,还能够减轻用户对启动耗时的感知,但是如果使用不恰当,将适得其反。当点击桌面图标启动 APP 的时候,程序会显示一个启动窗口,一直到页面的渲染加载完毕。如果程序的启动速度足够快,我们看的闪屏窗口停留显示的时间则会很短,但是当程序启动速度偏慢的时候,这个启动闪屏可以一定程度上减轻用户等待的焦虑感,避免用户过于轻易的关闭应用。

通常,大多数开发者都会通过设置启动窗口主题的方式来替换系统默认的启动窗口,通过这种方式只是使用“障眼法”弱化了用户对启动时间的感知,但本质上并没有对启动速度做什么优化。也有些 APP 通过关闭启动窗口属性 android:windowDisablePreview 的方式来直接移除系统默认的启动窗口,但是这样的弊端是用户从点击桌面图标到真的看到实际页面的这段时间当中,画面没有任何变化,这样的用户体验是十分糟糕的!

启动页 Activity 展示时,系统默认启动窗口的展示就会消失。

在这里插入图片描述
在这里插入图片描述

为什么会有系统默认启动窗口?

这是 Android 为了提升用户体验的一个优化,让用户在真正Activity启动之前首先看到一个画面展示,不至于让用户觉得点击了桌面 Icon 后,APP 没有反应了。

注意:我们启动应用时,都会展示一个 Splash 闪屏页,这个闪屏页不同于上面所说的系统默认的启动窗口,我们自定义的 Splash 闪屏页通常会展示我们的 logo 或者一些广告。

设置自定义闪屏页

设置自定义的闪屏页可以提高我们启动的“视觉速速”。这里,我们通过添加一个自定义图片,通常会设置一个背景,然后把 logo 居中显示,可以使用 xml 文件来布局(注意,该图片不可展示动画,并且展示时间也不可控)。这种方式可以给用户一种启动非常快的感觉,并且展示了平牌 logo 也有助于提升品牌认知。

对于启动闪屏,正确的使用方法是自定义一张图片,把这张图片通过设置主题的方式显示为启动闪屏。

布局 XML 文件:

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque"> <!-- The background color, preferably the same as your normal theme --> <item android:drawable="@android:color/white"/> <!-- Your product logo - 144dp color version of your app icon --> <item> <bitmap android:src="@drawable/product_logo_144dp" android:gravity="center"/> </item> </layer-list> 

清单文件:

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

代码执行到主页面的onCreate的时候设置为程序正常的主题,这样就切回到正常主题背景了。

 public class MyMainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { // Make sure this is before calling super.onCreate setTheme(R.style.Theme_MyApp); super.onCreate(savedInstanceState); // ... } } 

如上,最简单的方式是先调用 setTheme(R.style.AppTheme),然后再调用 super.onCreate() 和 setContentView()。

Splash 页

系统默认启动窗口之后,通常我们会设置一个 Splash 闪屏页的 Activity 作为启动页 Activity,用于展示广告,时间通常会在1.5s之上,到,4,5秒不等,这段时间我们也可以充分利用起来,为进入主界面的展示做一些准备工作(预处理逻辑、网络加载,框架初始化等)。

这里我们所说的 Splash 页是一个真正的 Activity,而不是系统默认的启动页,但它会紧接着系统的闪屏页显示,所以我们通常需要做一个由系统闪屏页到我们的 Splash 页的一个过渡效果。例如,如果系统默认启动窗口展示的时间非常短,并且和我们的 Splash 也风格差异较大,这样会有闪的感觉,体验不是太好。我们可以在Splash初始时,展示一个和系统默认启动窗口相同的页面,然后通过添加一个过渡动画,过渡到之后广告的展示,这样就完美的解决了视觉上的体验问题了。

目前主流 APP 的 Splash 页面,通常都是展示品牌 logo 或者一些开屏广告或者宣传页。Splash页面通常都比较简单(包括布局、逻辑都非常简单),所以 Splash Activity 创建的速度会非常快,给用户感觉就是“这个 APP 启动很快”的体验。而我们的主页面通常都是整个 APP 业务逻辑和布局最复杂的页面之一了,并且通常都需要网络数据来进行页面内容展示,所以如果我们在系统闪屏页之后,直接显示主页,通常会是一个比较糟糕的体验(APP 打开速度变慢了)。那么我们的主页要如何进行展示呢?我们的 Splash 除了给用户 APP 启动块的感觉和一些广告宣传,还有什么其他作用呢?

其实,几乎所有 APP 都将主页放在 Splash 页面之后展示,这样做的好处有几个:

  1. Splash 页面很轻量,创建和显示速度快,可以让用户觉得我们的“APP 启动快”。
  2. Splash 页面可以进行品牌和广告宣传,提高我们的品牌和广告的收益。
  3. 主页通常在 Splash 页面之后展示,这样我们其实将时间分为了三段:Application 相关处理逻辑、Splash 页面创建及展示、主页处理及显示。这样比直接从 Application 创建到主页显示,给人感觉更快了,因为中间加入了视觉的变化(Splash页),避免了一段更长时间的等待。
  4. 我们可以在Splash页面显示阶段,进行主页的一些预处理准备,比如:对主页所需网络内容进行预取操作、对主页所需本地内容进行提前 IO 操作、对主页所需 SDK 等耗时内容进行预处理。
  5. 主页的预处理会加速主页 Activity 的显示速度,是提高用于启动速度体验的最有效的方式之一。

总结


本文介第一部分,绍了系统闪屏页,以及如何使用闪屏页来提升“启动速度”的体验。第二部分,介绍了 Splash 页,以及如何利用 Splash 页,达到”快速启动“的效果。

关于启动性能,请参考上文《Android启动性能优化——分析篇》。


PS:性能优化专栏:《Android性能》持续更新中……

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234007.html原文链接:https://javaforall.net

(0)
上一篇 2025年6月3日 下午1:01
下一篇 2025年6月3日 下午1:22


相关推荐

  • 微信小程序如何接入讯飞星火API?

    微信小程序如何接入讯飞星火API?

    2026年3月14日
    3
  • arp病毒查杀_arp病毒攻击有哪些典型现象

    arp病毒查杀_arp病毒攻击有哪些典型现象XX公司网络卡断问题1.问题现象2017年XX公司机关网络出现几次异常情况,并寻求内外部专家对异常情况进行诊断分析,均未找到原因,具体情况如下:1.XX分公司机关网络IP地址为10.0.0.1

    2022年8月5日
    8
  • php soapclient出错,PHP7 SoapClient问题

    php soapclient出错,PHP7 SoapClient问题我最近从 PHP5 4 升级到 PHP7 男孩是一个改变 但这是不重要的 自升级以来 我遇到了 SoapService 的问题 这是我的 SoapRequest 在 PHP5 4 上的样子 redactedreda sha1 redacted createdgt201 07 26createdlt2 07 27responseeq 以下是在 P

    2026年3月18日
    3
  • HashMap底层数据结构原理解析[通俗易懂]

    HashMap底层数据结构原理解析[通俗易懂]老师:JDK中我们最常用的一个数据类是HashMap。那么,谁可以回答一下HashMap的底层数据结构原理是什么呢?小明:老师,我知道。众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。HashMap数组每一个元素的初始值都是Null。…

    2022年5月19日
    40
  • jmeter动态获取token_java比net core性能好

    jmeter动态获取token_java比net core性能好.netcore3.1使用JWT遇到在api控制器中获取不到当前用户信息以及token无效的问题1,在api控制器获取不到当前用户,我的原因是因为该控制器没有做授权验证,加上验证的特性就可以了2,token无效,先检查前端传过来的token是否是我们要验证的token格式,jwt会在token前面添加一个前缀,前端传过来也应该要添加,或者做其他处理这两个问题耽搁了一下午的时间,特地记录一…

    2025年9月16日
    8
  • phpstorm激活码2022linux【最新永久激活】2022.02.22

    (phpstorm激活码2022linux)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年4月1日
    1.9K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号