优化UI体验:程序启动、页面切换、数据加载、UI响应

 

前言:
整个3月份一直忙于项目的最后收尾,经历了改进性能优化的方方面面,从程序启动、加载数据、界面初始化 Activity各种生命周期的状态调整等。今天终于给出了性能提升后,相对稳定的版本,所以开始泡杯茶、认真的总结一番。

正文:
首先,若性能优化过早,则会由于后期的频繁改动,让你的费时费力的优化又回到从前(当然,基本的算法优化还是要时刻注意的),所以无论你从正金字塔 还是 倒金字塔 来设计程序,都得把性能优化放到最后来做。

到了项目后期,哪些地方是我们的优化点呢?
得从此程序的feature说起。
如果程序是一个音乐播放器,你得最快地让用户看到播放列表,若用户点击了play按钮,你得最快的让指定音乐播放起来;
如果程序是一个图片浏览器,你得最快地让用户看到图片Gallery,若用户点击了全图浏览,你得最快的让用看到全图片。

具体到某一个程序内部,则需要先做数值分析(用时间开/内存开销来说明 性能占用的分布环节在哪里,哪里有改进的空间?),有了数值分析的结果,才有说服力和优化方向。

也许你会说,博主你说了半天都是废话,我也知道啊,可问题是如何做到呢?代码如何设计编写呢?

嗯,我觉得,我们先不谈代码编写,这是最后的任务,先看看优秀的程序是如何做到的。我们从中学习,分析出本质的东西。


*程序启动**页面切换**数据加载*
程序启动期间会做不同的初始化工作,如连接服务器,加载基本数据,初始化基本视图、控件等。这些工作都是占用时间的,而且多数程序都要走这些流程,那么我们可以思考以下问题:

关于流程设计:
1.基本的初始化环节都哪些?
2.这些环节非有不可吗?
3.这些环节非得在程序启动时进行吗?
4.这些环节非得在UI线程(转移至后台完成)吗?
5.哪些环节可以延迟加载(目的是先让界面显示出来)?
6.最后再思考,如何优化I/O性能,如何进行算法级别优化?

关于用户体验。虽然流程不变,但更良好的用户体验也能让用户觉得“嗯,就快好了”:

1.是否有进度条?
2.是否可能考虑一个loading的“风火轮”,或变相的动画(如:Android手机QQ的log轮廓线动态扫描动画)?
3.是否可以显示模糊图像,再进一步显示更精确的细节图像,如新浪的博客插图显示(由马赛克图–>失真图–>细节图–>原始图像)?
4.是否可以delay 某些任务的 load,比如,延时2秒先让基本界面显示出来,再加载其它的?
5.是否可以利用户的操作习惯,进行分步式加载,比如,用户在初始界面看不到的东东,他需要点击下一步后,我们才提供加载,或者至少按排一定的优先级?
6.是否可以利用声音,提示语,来暗示用户,进行其它方面的交互,来分担用户的压力?
7.是否可以利用其它优势(如:声音,LED灯,手机震动)来转移用户的注意力,让用户不会一直烦躁地等待?
8.是否可以研究用户的心理极限参数,比如,这个界面用户最多等5秒钟,若超过5秒还未显示远毕,则用户有80%的概率进行取消/中止操作?
9.是否有良好的界面过渡体验(如:Activity间的切换,跳转时,出现卡、黑屏期等)?
10.是否需要做内存缓存、是否还要本地的持久缓存、是否进行“视觉欺骗” 或 “数据欺骗”?

*UI响应*
UI由控件组成,对于基本控件的设计&操作,可以思考以下问题:
1.Button是否实现了默认状态、按住状态、按下状态、弹起状态(至少满足前三种状态)?
2.输入控件是进行主动侦听输入检测,还是采用用户提交时的被动检测?检测结果如何反馈给用户?
3.进度条是否需要补充数值百分比显示?
4.检测结果是否涵盖了成功、失败(各种原因的失败)、异常、重试等状态(至少满足前2种)?
5.对于手机设计是否考虑了用户操作习惯后,进行舒适地界面布局(比如,常用按钮布局于右下方大拇指活动范围)?
6.是否对用户手机耗电量做了考虑(如:减少手机存储卡的I/O工作、提供自动或半自动的界面亮度调节接口)?
7.是否对用户的手机存储卡缓存文件进行规模控制(如:提供自动清理临时文件的策略)?

由于是公司的项目,所以在这里不方便显示代码实例,等自己做了些个人项目后,再补完吧!

最后总结:

1.用户体验可以全盘考虑,但性能优化要最后再做。
2.性能优化不是无境地优化,而是按商业需求,进行可控、有目的地、最好是有数据支持(如:5秒之内能显示出界面)的优化。
3.前期良好的全盘设计,加上中期高质量的代码编写(指编程风格和代码质量),将为后期优化减少大量时间。
4.对于大项目(多人维护),千万不可让核心部分仅仅掌握在某一个程序员手中,以防止被他的工作block住(生病,事假,离职等)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值