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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2018.3.17 模拟赛——(2)删数

    2018.3.17 模拟赛——(2)删数

    2022年3月13日
    64
  • PayPal 支付-Checkout 收银台和 Subscription 订阅计划全过程分享

    PayPal 支付-Checkout 收银台和 Subscription 订阅计划全过程分享

    2022年2月18日
    40
  • c++常量和常量表达式[通俗易懂]

    c++常量和常量表达式[通俗易懂]const,默认情况下仅在文件内有效constinti(12);const引用:对常量的引用不能被用作修改它所绑定的对象constintci(5);constint&rci(ci);rci=90;//错误不能修改允许常量引用绑定到非常量的对象、字面值或表达式上inti=20;constint&ri(20);con…

    2022年9月29日
    0
  • [转][darkbaby]任天堂传——失落的泰坦王朝(下)[通俗易懂]

    [转][darkbaby]任天堂传——失落的泰坦王朝(下)[通俗易懂]即使是日本业界人士也对1999年发生的“口袋妖怪所有权风波”知之甚少,实际上这个事件的结局足以改变游戏产业未来数十年的势力图,山内溥凭借着个人的睿智让任天堂再次渡过了命运的暗礁,而另一颗曾经炙手可热的璀璨明星却从此销声匿迹……   株式会社POKEMON(简称TPC)成立于1998年4月,由任天堂、Creatures、GAMEFREAK三社共同出资组建,该社成立的目的主要是对全球范围的口…

    2022年7月27日
    18
  • mysql format不要逗号_笔记:number_format() 函数去掉数字千分位的逗号

    mysql format不要逗号_笔记:number_format() 函数去掉数字千分位的逗号最近有朋友找我仿站,为了实现某些效果,要去掉访问次数千分位的逗号,说真的,倡萌没有系统学习过PHP,所以只好求教露兜老大,得知可以通过number_format()函数通过千位分组来格式化数字。自己折腾下,还真实现了,记录一下。PHPnumber_format()函数定义和用法number_format()函数通过千位分组来格式化数字。语法number_format(number,de…

    2022年10月20日
    0
  • Python包管理必备–pip命令&设置镜像源[通俗易懂]

    Python包管理必备–pip命令&设置镜像源[通俗易懂]近期周围很多朋友询问,Python如何管理包和模块,并且很多常用的包使用pip安装的时候,总是因为网络问题中断,在学习新包时造成了很大的挫败感,这些问题也是之前自己在学习过程中,遇到的痛点,所以抽出精力,整理了下之前关于这块的学习笔记,形成文章,希望给其他python道友以帮助,也给自己后续查阅带来方便。Python语言的核心能快速上手并且极具吸引力的是其异常丰富和强大的包,这些包给我们封装好了日常工作中遇到的问题或需求的各种解决方案,所以在python基础知识较为牢固时,遇到具体问题,具体学习对应的包

    2022年5月13日
    60

发表回复

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

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