活用通知栏,改善Android应用运行期体验

Android引以为傲的最为成功的UI设计之一,就是它灵活而强大的下拉通知栏,甚至连对UI有自己独到理解的Apple,都心甘情愿效仿这一设计。

不过大部分应用开发者对通知栏的运用理解上存在一些局限,以至于没有充分发挥出这一神器对App应有的价值。比较常见的理解是,通知栏是主要是用来展现Push通知,以及在用户关闭App期间通过后台服务推送信息给给用户。这确实是目前通知栏最常见的使用场景,但却在思维上将其局限于App运行期以外的交互方式。

为什么通知栏就不可以是App运行期间的一种交互形式呢?对于运行期的交互途经,一般开发者首先联想到的是Activity的范畴,需要通知时使用Dialog和Toast。其实通知栏作为一种应用运行期的交互方式,具有『低骚扰』、『节省界面空间』和『长留存』三个相当明显的体验优势。

下面就举几个典型的运用场景加以说明。

(1)App版本升级通知

很多App的升级通知都在启动阶段通过弹出对话框提示用户,用户确认后就开始下载并安装,在此过程中用户只能眼巴巴的等待下载完成。这是一个不太友好的用户体验,尤其是对工具类App而言。如果用户冲着一个急迫的待解需求打开App,这时候弹出升级提示,一方面很容易打断用户当前的使用意图,如果用户确认升级则迟迟无法解决当时的急迫需求;另一方面,如果用户吃一堑长一智,为了尽快解决需求,而关闭升级提示对话框,那么开发者希望以此推动用户升级App的效果就大打折扣了。

这时候活用通知栏,就可以很好的化解上述矛盾了。通过异步检测新版本,并创建一个通知栏消息,既能告知用户有新版本可升级(Ticker在顶栏的滚动显示效果),又不必阻断用户当前想要完成的操作。即使用户急于解决当时的需求而忽视了升级消息,在关闭App后,升级通知仍然滞留在通知栏中,可以有效的二次提示用户进行升级。如果非Play Store渠道安装的App,与之配合的最佳交互实践是:在用户点击该消息后,通过DownloadManager在后台下载安装包,待下载完成后创建另一条通知消息,用户点击再触发安装(升级)流程。这样引入的是一种很轻的交互,不会在低配置机型上因再次启动App界面带来的响应迟缓感。

(2)交互频繁场景下的非关键通知

这一点在游戏中体现的尤为典型,如果在用户的紧张操作过程中,需要给用户一些不急迫的非关键性消息(例如获得头衔、好友邀请),通过通知栏来递送就有不可取代的明显优势了。过去的交互设计习惯中,往往需要引入App内的『状态栏』来显示这类消息。这样做的缺点很明显,不仅增加开发成本,占用宝贵的屏幕空间,而且多条消息也难以实现堆叠,其实状态栏的职能用通知栏来取代是非常适用的。

与之相关的一个讨巧的通知栏使用技巧是:创建一条只含Ticker文字的通知,短时间后移除,就可以达到在通知栏滚动显示一些不需要保留的即时性消息,类似过往对『状态栏』的典型使用场景。

另外,活用同ID通知的『替换』,可以将多条消息合并提供给用户,节省通知栏的空间占用,给用户留下一个谦和的体验感受。而对于仅在运行期间有意义,不需要在App不活动时保留的消息,请记得在onPause()中移除,留给用户一个洁净的通知栏。

(3)『随叫随到』的信息区

很多互联网App的设计中,都不乏『个人信息(User Profile)』之类常驻界面信息区,开发者往往习惯在界面上开辟一小块区域显示这类信息,点击(头像)可以进入个人资料界面。

对于一些无需较强账户认知的App(如资讯类、工具类)而言,持续占用一块屏幕区域,哪怕是ActionBar上的一个按钮,对UI设计也是奢侈的。这时,不妨考虑利用Sticky的Notification(通过 Service.startForeground() 激活),Icon用于显示用户的头像,右侧的双排文字区合理排布用户的关键信息或状态。即使觉得默认的布局不够灵活,也可以定制自己的Layout以容纳更多的信息单元,并在有限的显示面积内支持简单的交互。如果支持Jelly Bean,还可以运用更为体验友好的大尺度和富媒体通知样式,以及可定制的交互按钮(Actions)。

Tip:别忘了在应用onPause()时移除这个Sticky通知。

当然,对于这种非常规的UI设计思路的认同,可能就仁者见仁智者见智了,不过一旦采用了这种设计,就需要给用户做好积极的引导,以免用户因习惯的原因而找不着这个入口。

(4)隐形通知

这应该是Google Now首次引入的一种通知体验设计模式。通过使用最低的Priority(Jelly Bean)或全透明的Icon(ICS及更早版本),使该通知在用户未下拉开通知展现区时呈现出一种『隐形』的效果。

这种通知一般展现一些优先级非常低,不需要用户显式关注的消息,但可以给用户形成一种暗示,『当我需要这类信息时,可以拉开通知栏试试看,它应该就在那里』,即使用户不再需要这些信息,也可以随时『挥之即去』(ICS+)。

虽然Google Now将隐形通知使用于后台服务中,但我们完全可以将其借鉴到App运行期间,发挥其无干扰的价值。比如用于展示不希望干扰用户的相关推荐、最近的非重要App事件、频繁更新的状态、游戏中的『任务指引』等。

同样记得要在onPause()时清理不需要留存的隐形通知。

 

将通知栏纳入App运行期的交互体验,是一种相对另类的设计思路,如果运用得当,不仅可以省下不少开发工作量,还能给用户一种略带惊艳的舒适体验。同时,需要保持清醒的是,通知栏也是一种相对紧张的资源,尤其是被国内大量常驻类App无条件霸占之后,如何掌握好通知的使用与滥用间的平衡点,也是需要一定设计智慧的。

阿里云主机试用体验

内部受邀试用了一下阿里云主机,让我此前对阿里云的印象有所改观。在云主机产品上,感觉阿里云还是比较能沉下心来客观面对国内的中低端市场的,并没有摆出阳春白雪的姿态来。

尽管内部试用邀请是针对『标准A型』的规格,但我坚持换成了『经济A型』,因为最低端的型号往往更能看出一家主机公司的态度和良心。

规格

阿里云主机目前的规格搭配,感觉不是特别合理,可能影响到成本及性价比。比如经济A型,单核、512M内存,60G空间,1Mbps的带宽。在这个CPU及内存规格下,空间显得太充裕,而带宽则较局促。相比之下,盛大的云主机似乎更为人性化,类似的规格『超微』,也是512M内存,存储是7.5G,带宽可独立选配(这一点是大爱),更贴合小型创业团队的需求。(也许阿里云更多面向的是电商建站,规格需求略有不同)

从阿里云的产品线布局来看,存储方案应会主推OSS和RDS。或许限制主机带宽是推广OSS的一个市场策略,但大容量的主机存储却感觉与这个目的背道而驰。

价格

因为阿里云主机的规格是绑定了带宽的,所以跟盛大云对比,同规格的价格差不多各有胜场。但是考虑到盛大云的规格搭配对小型互联网初创产品更为合理,而且带宽规格可以分开购买,就显得更有性价比了。

注:最近阿里云的高调团购促销,让价格无形中增添了相当的吸引力。预付一年省两个月,实际享受最高16个月(视团购成交量),还可以升级到1G内存和2Mbps带宽(对应『经济A型』)。相当于¥66/月的价钱购买接近『经济B型』的规格,已经比大多数国内VPS服务商的促销给力很多了。

配置

基于Xen PV虚拟化技术,目前提供的OS安装选项有点少,尤其是32bit系统,只有CentOS 5.3一个选择,对于选择小规格主机的用户有些不便。毕竟小规格主机,尤其是在内存有限的情况下,更倾向于使用32bit系统以节省内存。

后台因为上线不久的缘故,还显得略微粗糙了些,小问题不少,不过都影响不大,但其中有一点需要特别小心:管理控制太上面的停止和重启操作,是没有任何确认过程的。这样一个下拉选择框执行关键的维护动作,稍有不慎就误操作了……

性能(测试篇)

用hosting社区标准的性能测试工具unix-bench作了一个简单的横向测试(测试条件有限,数据仅供参考)。作为对比的几款主机除了大家所熟知的Linode 512之外,还有Lightwave的Xen VPS,阿里云的老双开集群Linux主机。

Aliyun Eco.A Lightwave PV.Tiny Linode 512 Aliyun Old
Specifications Virt 1 core Virt 8 cores Virt 4 cores Virt 2 cores
Dhrystone 2 using register variables 2127.5 1929.0 3024.8 2170.6
Double-Precision Whetstone 523.7 2572.6 1375.3 925.6
Execl Throughput 836.0 596.7 564.0 1673.0
File Copy 1024 bufsize 2000 maxblocks 2190.0 556.3 783.7 280.1
File Copy 256 bufsize 500 maxblocks 1495.3 441.2 489.7 183.4
File Copy 4096 bufsize 8000 maxblocks 2939.5 826.4 1573.5 461.2
Pipe Throughput 1436.6 1985.2 1242.4 1527.8
Pipe-based Context Switching 776.4 716.8 440.3 1429.7
Process Creation 966.8 532.4 407.8 1822.5
Shell Scripts (1 concurrent) 1036.6 1471.0 1355.7 2396.1
Shell Scripts (8 concurrent) 989.5 1347.6 1275.7 2516.0
System Call Overhead 2147.2 1049.8 838.5 895.1
System Benchmarks Index Score 1290.3 995.4 937.0 1045.8

可以看出,阿里云主机的优势在于相当强劲的IO性能(可能受益于现阶段母机整体IO负载较低),而在整数运算方面,Linode的优势更为明显;Lightwave的浮点性能强劲得益于它的AMD Opteron CPU。遗憾的是,在系统调用的开销上,阿里云主机似乎显得不太正常的高,可能与采用的虚拟机架构及参数调优有关。整体得分,仍然是阿里云主机胜出,显示出了阿里云主机目前在规格方面相当的诚意。

对于大部分Web或Mobile应用来说,主要关注整数和IO性能两方面,其次关注系统调用开销。JVM型后端可以不用太过关注进程创建和pipe方面的性能。

性能(感受篇)

为了有一个更为直观的感受,我在阿里云的主机上测试了一下Android源码的编译(CyanogenMod 10),首次编译大约耗时8小时,增量编译在2小时多一点。整体来说感觉比较满意。

操作过程中,shell的整体响应很稳定,没有出现国外低端VPS常见的卡顿(非网络原因)。

网络性能由于暂时没条件作国内云主机间的对比测试,就简单说一下直观感受吧。测试100M单线程下载,下行速度稳定在标称的带宽限额上,而上行带宽则没有作带宽限制,测试过程中曾经稳定达到了8M/s,这一点非常适合上行带宽需求不小的应用类型。

总结

整体上,阿里云主机给人的感觉是中规中矩,仍有较多值得改善的方面。但在一些细处,仍显示出特殊的吸引力,例如强悍的IO性能、无限制的上行带宽、高质量的双线阿里机房。作为一家国内一线的主机服务商,售后服务和技术实力方面还是有所保障的。鉴于阿里云敢于作出『100倍故障时长赔偿』的承诺,看来对于自己的可靠性技术相当自信。

无论是国内的小规模初创团队,还是Geek们希望跨越电信/联通的互通鸿沟,都值得趁阿里云此次难得力度的促销优惠,低价入手这个还处在培育期的云主机,至少可以少受小型主机服务商普遍的超售困扰。

时代的弥思(3)——后信息时代的变革

『后信息时代』,从上世纪90年代至今,曾有过各种不同阶段和角度的诠释,但今时今日,无论你相信与否,作为信息时代标志性分水岭的『信息大爆炸』已经开始加速并深刻的影响我们的世界了。

互联网的诞生将全球信息扁平化,Web 2.0又大大降低了UGC(用户产生内容)的成本,使得信息的发布从过往的媒体主导演变为全民参与,而微博客和SNS进一步降低了UGC的门槛并充分激发了UGC的冲动,近几年移动社交App的兴起更是为用户产生富媒体内容创造了无与伦比的便捷性。所有的这一切,都在迅速的燃尽信息大爆炸的引线,不断加速最终变革的到来。

当然,你不会听到那『Bang』的一声大爆炸的巨响,也不会被爆炸的气浪掀起几层楼高,不过你会快速的感受到某些变化。尽管质变的时刻尚未完全到来,但我们已经可以很清晰的预测和探讨大爆炸后信息时代的一些可预见的影响了。

最根本的质变是 信息供求关系的逆转,越来越多的信息产品将从此由卖方市场走向买方市场。与商品市场供求关系的此消彼长不同,信息时代的这一逆转趋势将是永恒而无法回头的,因为信息不仅借助于扁平的互联网进行传播,还具备了的一个显著有别于商品的特征——近乎零成本的可复制性。这个关键特征也将决定接下来所要讨论的若干内容,请谨记这一点。

信息供求关系的逆转,给整个社会所带来的深远影响中,首当其冲的就是 信息的价值分配机制

继续阅读时代的弥思(3)——后信息时代的变革

【原创】提高专注的时间管理小工具(Win32)

在被RescueTime反复羞辱之后,痛定思痛,今天早上爬起来之后决定开发一个提高专注的小工具,拯救我的时间专注率!

其实,失去专注很多时候是由于无意识的『开小差』,或者查资料时『跑了题』,也包括来自其它插入型的干扰,比如IM消息。所以,我解决这个问题的思路很简单,也很直接:事先锁定一个窗口(比如IDE或者PowerPoint),当离开它一小段时间后,就开始闪烁任务栏的窗口标题。

实现上,用到了Win32的一个API:FlashWindow()。为了开发方便,使用了AutoHotKey作为平台,半个小时便开发调试完成。不过仅在Windows 7下测试过,如果其它版本下有问题,请反馈。

使用方法:

下载exe或者ahk(如果安装了AutoHotKey)文件,启动它之后,切换到需要专注的应用窗口,按热键『 Ctrl+Win+Alt+F 』,即可看到当前窗口在任务栏闪烁了一次,表明它已被专注。接下来只要你离开这个窗口超过1分钟,它就会开始在任务栏每分钟闪烁一遍。热键『 Shift+Ctrl+Win+Alt+F 』可以解除专注锁定。

Concentrate.exe (适合普通用户)

Concentrate.ahk (适合安装了AutoHotKey的用户)

Dropbox使用技巧拾零

Dropbox可以算是文件云同步领域的鼻祖了,即使不是最早出现的,也是第一个推动云同步向普通互联网用户普及的。Dropbox的成功并非偶然,其强大而且独一无二的功能和技术是支撑其用户忠诚度的基石。作为一个Dropbox的早期用户,使用至今,有些小经验小技巧,在这里与大家分享一下,希望能帮助大家把Dropbox的作用发挥到最大。

值得信赖的差量同步

『差量同步』是Dropbox相比其它同类云同步工具的核心技术优势。其效果可以简单理解为,文件的变更只需同步变化的部分,为用户节省流量和时间。差量同步所带来的好处其实还不仅仅是文件的变化同步更快,你还可以随心所欲的将文件或整个文件夹从Dropbox下的一个位置移至另一个位置、更名,甚至拿掉一段时间之后再放回来,它们都不必重新被上传到服务器。而其它云同步工具就未必能这么省心了。

Dropbox的其它一些特性,也是建立在这个机制之上的。就拿『文件历史』功能来说,别担心Dropbox会消耗数倍的空间来保存文件的历史版本,其实它只是保存了多个版本的差异,这样消耗的空间通常是非常少的。

得益于强大的差量同步,你甚至可以在Dropbox之上构建其它存储技术,并保持高效率的同步。比如在Dropbox中使用TrueCrypt,由于后者对加密数据的变更作用到卷文件上体现为局部的变化,所以可被Dropbox高效的同步,而完全不必担心一点变化而导致整个庞大的卷文件需要重新上传,这是其它一些云同步工具所无法比拟的。不过,在这类场景下需要非常小心『变更冲突』可能带来的不良后果(产生两份不和谐的副本),尽可能不要同时在多处对数据进行修改。

继续阅读Dropbox使用技巧拾零

时代的弥思(2)——角斗士的悲怆

把刀用力刺进另一个人的身体里,观众会为此向你喝采、崇拜你。
而你,也会开始为了喝采声,而爱上他们……

最终,我们都会化为一堆枯骨。
可悲的是我们无权选择命运,但有权决定如何面对死亡。
唯有如此,才能像个人一般的。被人们追忆。

——电影《角斗士》

 

对角斗士而言,荣耀之外,就只剩下深深的悲怆。他们无法为命运抗争,因为在那个时代,他们仍旧是奴隶,只是比其它的奴隶活的更体面一些。

奴隶社会脱胎于那个崇尚『各尽所能、按需分配』的原始共产主义,看似是一种倒退,但却有其内秉的必然性。劳动生产率的大幅提升,尤其是手工业的出现,使部落有了富余的产出,从而推动了财产公有制向私有制的转变。人性中的私欲被释放和激发,催生了部落内的背叛、对立、压迫和剥削。战俘和刑律只是蓄奴开始的幌子,对财产的占有和对资源的控制成为了奴隶社会的阶级基础。表面上看,不平等的阶级结构削弱了投入生产的劳动力,但恰恰是这种『不平等』释放了奴隶主阶层的时间和思维,从而产生了脑力劳动和体力劳动的分化,进而孕育了知识经济并在往后的历史中长期主导生产的变革。生产力在这种残酷的不平等制度中得到了长足的进步。

可是,在我们感叹于教科书上对那个久远年代略带嘲弄的描绘时,有多少人真正意识到,我们正在又一遍重演这个无法阻挡的历史进程?或许看起来并非那么的雷同和明显,但背后左右社会演进的冰冷规律却是惊人的一致。互联网正在你、我、及每个人眼前,迅速的从那个曾经自由、无私的原始共产主义社会大步踏上走向奴隶社会的不归路……

这并不是危言耸听,请试着回答以下两个问题,然后再回头审视上面的结论:

  1. 互联网的『自由』和『免费』精神,是否正在被Facebook、Apple,甚至曾经高举这面大旗的Google所边缘化?
  2. Web所倡导的『开放』与『互联』的精神,是否正在被一个个所谓的『平台』筑起的一道道高墙所摒弃和切断?

继续阅读时代的弥思(2)——角斗士的悲怆

时代的弥思(1)——这是一个什么社会?

『这是最好的时代,也是最坏的时代』,周围的人常常这么感叹,但对这个时代的理解,却是仁者见仁智者见智。既然谁也说不清楚这到底是一个怎样的时代,反正离世界末日说不定也剩不到一年了,那我也就不惮来发表一下自己对这个互联网时代的拙见,算是为这个博客扫扫门前积雪吧。

2011年,读了两本有意思的书,一本是上半年老陆赠予的《Facebook效应》,另一本是年底前在亚马逊上购买的《认知盈余》。两本书我都是抱着批判的心态来读的,对前者的批判是启发我思考的线索,每当我的思路陷入停滞的时候,我只要翻开《Facebook效应》来读一读,并顺着书中理论的反方向走下去,就豁然开朗了;对后者的批判并不是我的目的,但每当我的模型遇到挑战时,就翻开《认知盈余》相关的章节,试图从中发掘破绽,这些破绽往往能指引我化解模型中的矛盾和冲突,让它重归优雅。所以,我非常感激这两本书,它们让我在2011年末经历了一次有生以来最为激烈的头脑激荡,并为我的2012年指明了方向。

继续阅读时代的弥思(1)——这是一个什么社会?

从单硬盘向Intel Matrix RAID的无损迁移

趁这次为女友升级电脑,顺便给自己的PC作了一次廉价的升级:将E8400 CPU超频了40%,再添置了一块硬盘组建Matrix-RAID(其中少量空间部署RAID-1,用于保存照片、文档等重要文件;其余空间全部部署RAID-0,以提升电脑性能。),总共只花费了不到¥300。

当初在购置这台主机时,曾经深入考察了Intel Matrix RAID技术(现改名为Rapid Storage Technology),其“无损迁移RAID”机制成了吸引我购买ICH10R主板的关键动力之一。两年半后,终于有机会开始利用这个技术升级现有的电脑时,我却发现这其中所深藏的玄关,远没有当初想象的那么简单……

继续阅读从单硬盘向Intel Matrix RAID的无损迁移

让旧软件也用上Win7任务栏的Jump List

Windows 7 强大的 Jump List (跳转清单)特性大大提升了我们日常应用的便捷性,随着越来越多的应用程序对它的支持,Jump List 已经成为了大家 Windows 操作习惯中的重要部分。

可惜一些旧时的应用软件,或者软件开发者没有引入对 Jump List 的支持,就难以从中获益了。不过,Windows 7 本身还是给我们预留了一定的定制空间,只要稍加利用,也可以为这些旧软件整合 Jump List 的新体验。根据软件控制方式的不同,一般有两种整合方式:

继续阅读让旧软件也用上Win7任务栏的Jump List

对方正无视开源协议盗用FontRouter源码行为的严正声明

作为一款内置收费服务的商业软件,目前已经掌握的充分证据显示“方正字酷”大量使用了FontRouter开源项目的源码,却未履行“Apache License 2.0”的要求在软件本身的发布包及网站中附带任何对源码使用的声明和协议文本,已经构成了对开源协议的恣意践踏。

在此提出严正声明,要求“北京北大方正电子有限公司”立即停止上述侵权行为,并就已经造成的不良影响在媒体上公开道歉!如果对方拒不承担上述违反协议的责任,我将把这一事件永久性的写入FontRouter开源项目的“侵权榜(Shame List)”,作为对恣意践踏开源协议的抗议。

(本文将以电子邮件形式递交“北京北大方正电子有限公司”)

注:FontRouter是Symbian OS上广受欢迎的一款免费的字体替换工具软件,并在 2009.2 以 Apache License 2.0 协议开源