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


相关推荐

  • Intercooler.js – 让 AJAX 像锚标签一样简单

    Intercooler.js – 让 AJAX 像锚标签一样简单

    2021年9月4日
    51
  • 点对点通信实验

    点对点通信实验点对点通信实验语言:python1.socket基础参考:百度百科,socket,CSDN上也有很多讲解socket的。2.python中使用的相关函数官方文档1)socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None)AF_INET:ipv4协议SOCK_STREAM:面…

    2022年7月25日
    7
  • Linux系统中安装软件的三种方法

    这篇来说一下Linux系统中怎么安装软件,首先说一下应用程序与系统命令的区别:1、文件位置系统命令:一般在/bin和/sbin目录中,或为shell内部指令应用程序:通常在/usr/bin和/usr/sbin目录中2、主要用途系统命令:完成对系统的基本管理工作,例如IP配置、管理账户应用程序:完成相对独立的其他辅助任务,例如网页浏览器3、适用环境系统命令:一般只在字…

    2022年4月7日
    73
  • 绝对成交课程培训_成交的5大关键

    绝对成交课程培训_成交的5大关键影响力集团培训讲师孟昭春http://blog.sina.com.cn/mengzhaochun第一天下午一个思想:把自己能把握的事情把握就能实现把握不了的目标。1.孟老师从自身做法出发讲出:他下面的销售人员问他问题他从来不给答案,只是指墙(墙上有5问5答)。2.大客户特点:金额大、周期比较长、内部决策者多。3.用户的四个拒绝:我不需要、我不着急、我不相信、我没钱。(70%顾客…

    2022年10月24日
    1
  • C语言如何计算数组的长度

    C语言如何计算数组的长度(1)借助sizeof()函数:#include&lt;stdio.h&gt;intmain(){ //定义一个整型数组,并进行初始化赋值9个数据:  intarr[]={1,2,3,4,5,6,7,8,9}; intlength=0; //计算数组中数据长度: //所有数据的字节数除以一个数据的字节数即为数据的个数:  length=sizeof(arr)/…

    2022年7月27日
    3
  • 了解大数据

    了解大数据

    2022年3月6日
    41

发表回复

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

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