如何使你的app更加流畅

Paste_Image.png

原文链接:http://blog.nimbledroid.com/2015/09/17/how-to-make-your-application-fluid.html

Nimbledroid.com 为您开发的应用的每一版本提供自动全面的性能分析

正文

在上一篇发布的博客中,我们讨论了监视app性能的重要性。这一回我们将要想大家详细展示怎样具体操作。我们和一些世界著名app的开发团队(其中包括微信和雅虎新闻聚合的团队)就开发流畅的app所需的最好的开发规范进行过交谈。就我们的经验和同那些开发团队的Leader交谈的结果来看,我们发现开发好的app最重要的规范是建立一套app优化流程:

Paste_Image.png

优化过程

持续地监测你的app的性能来检测你的app是否表现不佳是非常重要的。一旦一项性能问题被检测到,你应当集中精力去寻找问题的根源。这项诊断也许需要更多的检测和优化具体性能的数据,这会使你陷入一个我们所谓的“检测—分析 循环”的陷阱相当长的时间。即使在你搜寻到问题的根源后,仅仅修改好懒散的代码是远不够的。你必须重估你app的度量以确保你的修改奏效。这就意味着更多的检测。

检测

主要影响用户体验的性能度量有两种。第一种,我们主要关注响应时间:你的app对一个用户操作(比如:app的启动,看一篇新的文章,加载一个联系人列表,或者是查看一个Facebook也页面)的响应需要多长时间。理想情况下,你的app对以上这些情景响应都很迅速,这会使得你的app有更好,更吸引人的用户体验。

关于响应时间的一个关键(并且独特)的例子是启动时间。app启动时间是一个用户对一款app的第一印象,而第一印象是非常重要的。事实上,一项计算机软件调查显示79%的用户会在删除这个问题app之前再次尝试一或两次。

以下是在软件性能和优化方面有很多年经验的NimbleDroid所给的一些建议。

我们建议你的app应当在2秒之内完成启动,因为这是用户所期待启动时间的中等水平。对于那些对web性能优化很熟悉的人,47%的用户希望一个页面在2秒以内加载完毕,用户对于他们使用活跃的移动app更缺少耐心。

建议 1:显示app启动时间在2秒以内

第二重要的度量是流畅度。app在短时间内响应是很好的体验,但响应同时必须流畅,尽量少的卡顿。用户非常善于察觉卡顿,这也意味着即使微小的卡顿也会对你的app用户体验有负面影响。一般来说,人类可以察觉22毫秒的卡顿,其中1/4的人可以洞察2毫秒—16毫秒的卡顿 — 即标准的60帧每秒的刷新率(FPS)。

要理解流畅度,你可以通过收集你的app的FPS和每帧耗时的数据。然而,你需要牢记:这些数据并不能告诉你app性能问题的根源,也不能帮你找出代码里导致卡顿的方法。

对于Android手机,UI线程(你的app执行的主线程)是唯一能更新UI的线程。为了保持60FPS的刷新率,UI线程必须在16毫秒内完成每帧的绘制。如果UI线程里任何方法的调用耗时比这更长,你的app就会丢失一帧,造成短暂的卡顿。更糟糕的是在这段时间里,你的app对用户的任何操作是不响应的因为UI线程被一个方法的调用给阻塞了。

按照常规来说,要想保证UI线程里每次的方法调用都在16毫秒以内几乎是不可能的。32毫秒是一个临界值,相当于丢掉2帧,也更加真是。我们把那些执行时间超过这个临界值(超过32毫秒执行的)方法称之为耗时方法,因为这些方法导致了这个app暂时“挂起”了。剔除所有耗时方法可以有效地使你的app表现更加流畅,整体上提供一个更好的用户体验。

建议 2:剔除耗时方法

好吧。检测那些和用户体验有关的度量非常重要,但是我们检测这些度量的频率是多少呢?每次构建的时候检测?还是每天构建的时候?或是发布之前?或是版本在生产环境中?!你应该一有机会就检测 — 你越是频繁地追踪你软件的度量,你就越早地能察觉和对性能问题做出反应。雅虎的团队告诉我们在每次他们的app发布前都有分析,微信的团队每天构建的时候都分析他们的app。

建议 3:尽可能频繁地检测

分析

优化你的软件的关键是了解常见的性能问题的和系统地在你的代码中移除他们。在我们对app下载超过5M的文件时的性能问题分析中,我们发现开发者经常使用那些在桌面机器上执行很快却在性能较弱的移动设备上执行非常慢的构造方法。例如:在一台Macbook Air上ClassLoader.getResourceAsStream()这个方法获取一个有3K大小的jar包资源花费7毫秒执行完毕。然而2013年的Nexus 7 在同样资源文件的情况下执行该方法需要1700毫秒。原因是Android对getResourceAsStream这个方法的实现在第一次执行的时候干了很多额外的工作,对apk文件中所有资源文件进行了索引,验证授权的apk文件,解析它的manifest文件。类似这类的操作很耗费CPU资源,导致app明显减速,— getResourceAsStream使Walgreens大约减速1.7倍。NimbleDroid编了一个在你的app中可以避免这种情况的方法列表。你可以在这查看。

建议 4:了解一系列的常见问题

有时候性能问题是由你使用的第三方的SDK而不是你的代码导致的。这些问题往往很难被追踪到。考虑到 org.joda.time是一个很流行的处理时间的java库。你很可能在你以往的Java工程中用到了它。结果表明仅仅在app启动的时候创建一个org.joda.time.DateTime()对象会导致启动言重变慢 — Yahoo Fantasy Sports这款app会启动慢2秒。这是因为org.joda.time.DateTime()使用了getResourceAsStream()这个方法来从apk文件中加载时区数据。

建议 5:避免第三方SDK所导致的意外

优化

修改懒散的代码可以是一个噩梦般的经历。造成app减缓、停止运行的方法有很多,排除这些问题可能会花费几周的开发时间。与此同时,也有一些通用的修改建议。你可以一方面用更多高效的数据展现形式、算法和实现来使代码运行地更快,或者(在那些引用第三方SDK不能直接修改代码的情况下)你可以调用子线程的代码以确保UI不会等待。遵循这些建议会使你在让app更加高效,创造用户喜爱的产品的道路上走得更远。

你能得到帮助的地方

通常需要宝贵的时间和一些灵感来使这个性能优化过程帮助你打造更加流畅的app。这就是我们提供给Android开发者快速,强大的优化分析工具的原因,以保证这些开发者可以更集中精力于你们所擅长的方面:给用户带来美妙的产品。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,194评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,058评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,780评论 0 346
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,388评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,430评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,764评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,907评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,679评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,122评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,459评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,605评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,270评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,867评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,734评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,961评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,297评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,472评论 2 348

推荐阅读更多精彩内容