回国快一年了. 既然人在国内, 就免不了用到各式各样的国产应用. 而偏偏安卓应用的质量还大多不太能看, 问题数不胜数. 借着知乎今天更新这事儿, 我写下这篇文章, 借此来谈谈在安卓应用上最常见的一个问题: Splash Screen. 当然, 这些内容并不只是针对知乎, 很多国内应用都有相同的问题.
实际上, Splash Screen 算是一件很有历史的东西了. 它的起源大概可以追溯到早年 PC 游戏和各类大型桌面软件上 —— 这些应用软件在启动时需要加载大量的资源, 又不能让用户产生软件死掉的感觉, 所以一个游戏或者软件加载的时候, 就会显示一个启动画面, 然后带上一个进度条什么的, 让用户知道这个软件是在加载中而不是死掉了 (当然, 还有一些软件确实是一面显示着启动画面, 一面死掉了…).
而在移动应用上采用 Splash Screen, 又可以追溯到 iPhone 刚刚发布的时候 —— 当然, 那个时候的“启动画面”还不是 Splash Screen. 最早的启动画面是一张仿画面造应用内容的画面, 或者干脆就是一张应用截图:
(Image credit: Cyril Mottier)
iOS 应用利用这样的一张启动画面, 令用户认为应用已经载入, 与此同时在后台拉取应用数据与资源, 并稍后呈现给用户. 这样的方式取得了不错的效果, iOS 很快给大家留下了“启动速度快”的好印象. 毕竟早期 iPhone 宥于硬件条件限制, 很多应用从点击图标开始加载到可用状态几乎都要花上两三秒. 如果显示一个黑屏, 那确实是太令人不耐烦了. 而到了今天, 随着硬件机能的飞跃, iOS HIG 里已经不再建议开发者把应用截图作为启动画面, 而是建议开发者尽最大努力避免启动画面 (As much as possible, avoid displaying a splash screen or other startup experience).
实际上, 标准的 Android 应用的启动也是这么一个逻辑: 先载入应用的框架 (当然, 在 Android 上不是图片, 而是实打实的应用框架), 同时在后台拉取应用内容, 之后呈现给用户. 详见: Android Design in Action —— 初期体验. 上一个版本的知乎 Android 客户端就是这么做的, 体验也相当之不错.
(Image Credit: +Android Developers)
可以看到, 从最开始 Apple 就没打算让启动画面变成现在的 Splash Screen 的模样. 但是不知从什么时候开始, 越来越多的开发方开始打起了这块屏幕的歪心思. 开始的时候仅仅是在框架图片上加个公司 Logo 强化一下品牌什么的, 然后就不知不觉的变本加厉, 连框架图片都不要了, 直接变成了一张公司 Logo, 甚至是广告什么的…… 启动画面就这么变了味儿, 演化成了 Splash Screen.
目光转回安卓这里. 大家都应该知道, 在国内, 尤其是国内的大公司, 安卓从来都是 iOS 的附属品, iOS 方面怎么搞, 安卓方面也亦步亦趋跟着. 于是当大家在 iOS 应用上把启动画面搞成了各种公司 Logo 和广告之后, 安卓应用当然是逃不了一劫, 只能乖乖跟着改. 而且在国内, 他们甚至可以在 Splash Screen 上加入可以点击的链接……
那么, 为什么 Apple 和 Google 都把 Splash Screen 看作过街老鼠, 恨不得除之而后快呢?
首先最明显的一点就是, 现在的机能与应用配合, 已经不需要那么长的时间来加载应用资源了 (但是即使时至今日, 依然有一些应用由于优化差劲等原因, 依然需要耗费很多时间来启动, 比如, Path……). 在理想的状况下, 用户点开这个应用到应用已经完全准备就绪之间的时间, 应该是短于一秒甚至五百毫秒. 这个时候加入 Splash Screen, 只会拖慢应用的启动.
其次, 启动画面会打断用户的思考. 很多时候, 用户是在心里带着一个特定的任务打开应用的 (比如, 计算器.当然,也许知乎用户并不会经常带着任务打开这个应用吧). 此时如果应用给用户闪了一个带有其他信息的 Splash Screen, 有一定的几率会导致用户一瞬间忘记掉自己原先的任务 —— 在先前的一篇文章里, 我怒斥了 Smartisan ROM 计算器那极为糟糕的设计, 就是因为它的界面设计会让用户在启动它的瞬间看到视觉错觉而导致忘记自己原先的任务. 对于计算器这样一个应用, 让用户忘记自己打开它是为了什么, 简直是不可饶恕的错误. 同理, Splash Screen 的加入也让很多其他的应用犯下了这样的错误.
而在 Android 上, 这个问题会变得更为严重 —— Android 作为一个多任务系统, 非常经常需要在应用之间跳转. 当用户心里带着任务从另一个应用跳转到这个带有 Splash Screen 的应用时, 他有可能会因为被 Splash Screen 吸引而一时忘掉了自己原先进入这个应用的目的, 严重的阻碍了跨应用交互体验.另外, 由于多任务的特性, 应用往往会有很多个不同的入口 —— 有的时候是直接进入主屏幕, 有的时候是进入某个子层级.有的应用更因为加入 Splash Screen 而打断了导航流程, 体验极其糟糕.
若是要在应用中加入 Splash Screen, 就必然需要额外的资源. 很多国内应用的 Splash Screen 是一张图片, 而在 Android 屏幕分辨率如此碎片化的今天, 准备 Splash Screen 使用的图片无疑会占用很多空间. 更令人感到哭笑不得的是, 有些国产应用的启动器没有为不同的屏幕分辨率/比例进行优化, 在 Nexus 4, 魅族 MX 2/3 这样非主流/标准分辨率的机器上显示的就是一张拉伸过的图片, 丑陋之极.
不管你的 Logo 有多好看, 都没必要专门用一个 Splash Screen 来展示 —— Android 标准 Action Bar 上已经留了一个位置给应用的 Logo (Oops, 如果这个应用采用的是 iOS UI 的话, 那 Top Bar 上确实是没有放 Logo 的地方呢). 更何况, 想要呈示应用品牌的话还有很多更好的办法, 为什么非要选择 Splash Screen 这种最不讨喜的办法呢?
更重要的是, 不管你的 Splash Screen 做得多精美好看, 它都是在浪费用户的时间.而当 Apple 最早提出启动画面得概念时, 是为了让用户觉得应用启动迅速, 响应灵敏. 而这个出于好意的决定今天却被各个开发商用来无端浪费用户的时间. 作为一个移动应用, 内容和功能才是第一要义, 而应用多显示一毫秒 Splash Screen, 就是多浪费了无数用户一毫秒时间. Android 的设计原则中, 特别强调了 Simplified My Life 以及 Make important things fast, 不就是为了避免用户的时间被无端浪费? 开发方没有任何的理由给用户增加无谓的等待. 人们已经在生活中等待了足够多的了: 等地铁, 等红灯, 排队, 等待网页内容加载, 等待下载, 化妆/等待伴侣化妆…… 为什么还要再让他们在应用里浪费时间呢? 更何况, 智能手机本就是为了减少我们的等待而生的.
这篇文章的部分观点整理自 +Cyril Mottier 的博客 Splash Screens Are Evil, Don’t Use Them! 与 +Roman Nurik 的博客 A mobile design anecdote on perceived latency and touch feedback — Fast can sometimes feel slow.
@TingTalk汀说 官方微信订阅号已开通, 请扫描下方二维码或搜索“TingTalk汀说”添加关注~
— 完 —
本文作者:NovaDNG
【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)