如何避免iOS应用卡顿
iOS应用除了闪退问题外,卡顿问题也会对APP带来差评,甚至流失更多的用户。卡顿是什么呢?卡顿就是应用运行不流畅的现象,给用户的直观感受就是点击屏幕操作有停顿、响应缓慢、界面卡死等。轻微的卡顿问题会影响用户体验,严重的情况更会造成应用不可用。那么,针对iOS应用卡顿可以使用友盟UAPM来解决卡顿的问题。
作为一名有态度、充满情怀的开发者,当然就是立马撸起袖子准备修复了。那么问题来了,我们要从哪下手呢?
俗话说治病先治根,那么就要了解到卡顿是怎样产生的了。
创建一个UIButton,当用户点击的时候,主线程会响应及处理点击事件,这里是执行handleButtonAction方法。handleButtonAction方法发起了一个网络请求下载图片。必然的,这是一个耗时的操作。
在iOS应用中,所有的UI操作及更新都是在主线程完成,并且主线程的runloop是逐个处理用户事件的(当然其他的runloop也一样),所以主线程必须等待上一次事件处理完成后才能继续响应下一次事件。
由于在主线程内发起耗时网络请求,主线程只能停止响应接下来的所有用户事件,等待网络请求结束。在等待的这个过程中,应用就停止响应了,也就是出现卡顿现象。
为了更好的理解主线程的runloop,我们来看看iOS应用的运行机制。
在iOS应用启动后,系统会自动创建主线程并开始运行它的runloop,监听处理分发事件,当没有事件发生时进入休眠状态,有事件发生时系统会将接收到的事件放在一个队列里,然后唤醒runloop依次处理事件。
绝大部分用户感知到的卡顿就是由于主线程阻塞了,在处理某次事件消耗了过长的时间,导致主线程处于等待状态,无法及时响应用户的下一次输入事件。
由于iOS上的UIKit只能在主线程进行处理,导致开发者在开发过程中不经意间在主线程做了一些消耗时间的工作,导致了应用卡顿。
根据上述内容我们了解到了是什么原因导致卡顿的,接下来就是如何避免卡顿的问题了,友盟uapm监控平台可帮助到大家!
避免卡顿的黄金法则就是不要让主线程干重活,例如网络请求,读写大文件,复杂的运算等一些耗费大量系统资源及时间的任务。
充分利用好iOS的多线程,如NSThread、NSOperationQueue,GCD等干脏活、累活,让主线程能及时迅速的响应用户事件。
主线程轻松了,应用就流畅了,用户也就会越来越多,用户的使用感爽了,就不用担心差评的问题了,五星评价也就越来越多喽
那么我们根据上面的黄金法则修改下handleButtonAction方法,用GCD来进行网络请求。经过修改之后,现在主线程就不会发生阻塞了,迅速的执行完用户的点击事件后,然后等待响应用户的下一次事件。
除了在开发过程中开发者需要时刻牢记黄金法则,避免写出阻塞主线程的代码,我们还需要一套监测机制,来帮助我们及时的发现应用卡顿,第一时间定位并修复,给用户如丝般顺滑的操作体验。
应用发布后如果碰到用户反馈卡顿,我们又该如何去定位解决问题?
一个比较常见的场景:用户反馈应用卡顿,客服人员反馈给开发者,开发者要求用户提供更加详细的信息以定位问题,但是问题又来了,很多时候我们联系不上用户啊!怎么办?熬夜加班逐行检查代码,说多了都是泪。
那么,友盟UAPM作为一款应用性能监控平台,这不就派到用场了嘛不仅可以解决开发者对iOS卡顿问题的烦恼,还可以协助APP应用,让用户体验到APP的流畅性。友盟UAPM同时提供云真机测试能力,助力开发者从研发测试质量验收到线上问题复现排查,保障应用品质,提升测试效率。在云真机测试期间自动采集崩溃信息,提供详尽的崩溃报告协助筛查,真正实现监控测试全流程深度打通。
UAPM应用性能监控平台,通过轻量级的集成接入即可拥有实时、可靠、全面的应用崩溃、ANR、自定义异常等捕获能力,及卡顿、启动分析、内存分析、网络分析等性能监测能力,支持多场景、多通道智能告警监测,帮助开发者高效还原异常、卡顿用户的访问路径和业务现场,缩短故障排查时间。这一块的功能是我比较喜欢的,建议各位开开者有以上这些烦恼时,都可以试试运用上UAPM的功能,你会发现不一样的使用和便捷。
铜雀台起个诗意的名字明代吕阳珠帘穗帐等风流,歌吹犹闻溺妓舟。曹氏帝王何足齿,独传佳话与箜篌。铜雀台吕阳介绍明末清初江南无锡人,字全五。明崇祯十三年进士。……
小金山别宪长用前韵其二起个诗意的名字明代陈堂郁水迢迢秋自好,那堪怆别忆同游。识韩自愧非无日,借寇宁知不暂留。潦倒尊前难判袂,踟蹰江上欲停舟。重来更为东人计,早入明光一借筹。……
心远亭探梅得阳字起个诗意的名字明代梁有誉招携欣过水云乡,祇为寻芳兴倍长。偶傍池中微见影,忽从林里暗闻香。菟园飘处随残雪,汉苑开时带夕阳。羡尔浮丘山畔宅,岁寒千树得徜徉。……
砥柱歌上陈留刘相国起个诗意的名字明代顾璘黄河之源出昆崙,万里震荡排中原。行云翻空日月斗,急雨倒海雷霆喧。下民咨嗟上帝怒,乃遣神禹清乾坤。手握巨斧开龙门,中标砥柱气势尊。……
重阳后与陆悬斋观菊起个诗意的名字明代陶益年来幽事力能支,园菊培成遍接篱。蜜蕊露晞裁欲早,香包霜薄拆应迟。凝烟秦女窥帘后,衰雨杨妃赐浴时。几度携壶贪看尔,莫因佳节苦相疑。……
城外旧居予大父方伯公所筑也虚起个诗意的名字明代陶益第宅新修数十秋,石楼丹勒日光浮。赐书宝动骊龙见,封诰函开彩凤留。种德庭除时在念,渥恩霄汉世难酬。课儿学运斋前甓,犹似桓公在八州。……
和马粹老四明杂诗聊纪里俗耳十起个诗意的名字宋代舒亶佛磬云中寺,樵歌郭里湖。城居荫杨柳,野寇息萑蒲。巫语传杯珓,渔蓑入画图。幽香满花谷,不趁雪霜枯。和马粹老四明杂诗聊纪里俗耳十……
天长道中三首其三起个诗意的名字宋代汪藻节物兼暄暑,川原半雨晴。雉场时一雊,蛙亩忽齐鸣。斗粟违高枕,囊衣度古城。读书成底事,投老失春耕。天长道中三首其三汪藻介绍……
癸亥杂诗八首其四起个诗意的名字明代何瑭盘谷燕川二月寒,马头溪水隔天坛。黄茅踏遍幽人径,白石烧成道士丹。风煖野禽朝对语,月明松鹤夜交欢。采真拟结峰头屋,引领西南尽日看。……
咏怀古迹五首其三铜柱起个诗意的名字明代陈子升分茅岭下寻铜柱,薄海人思汉伏波。列阵不难招象马,为梁真欲架鼋鼍。山川据险将无敌,金石铭功在不磨。莫道南征犹缓计,凌烟他日看巍峨。……
风入松其六晚湖起个诗意的名字明代高濂稠烟低压水痕黄。紫绿山光。金霞翠雾双林晚,听哑哑、鸟宿斜阳。衔日远峰的的,吞云高树苍苍。沾衣寒湿露华香。欸乃沧浪。渡头灯火星……
遥和太宰乔公致政起个诗意的名字明代顾璘赤写飘飘别帝乡,高风肃肃动朝行。天曹藻镜还多士,国典蓍龟祇旧章。安石山中聊独卧,温公天下竟难忘。惟怜杖履追游客,各自烟霞老一方。……