微信团队披露:微信界面卡死超级bug“15。。。。”的来龙去脉

  • 时间:
  • 浏览:0
  • 来源:大发5分快3_极速5分PK10

《架构之道:二个线程池池员成就微信亲戚亲戚大伙儿圈日均10亿发布量[有视频]》

《移动端IM实践:谷歌消息推送服务(GCM)研究(来自微信)》

下图为该女网友的分析:

亲戚亲戚大伙儿好,给亲戚亲戚大伙儿介绍一下,这是Bug:

《微信技术总监谈架构:微信之道——大道至简(演讲全文)》

于是亲戚亲戚大伙儿多增加了四根规则:

同类于于知乎的回答很全部:https://www.zhihu.com/question/65828771

最后的优化效果,如图:

2)其二:TextView堪称Android最冗杂的另有4个 组件之一,十哪几个 Layout逻辑代码的冗杂程度很高,另一方实现所有的Layout接口,两种 已经 一件冗杂且工作量很大的工作;

下图是女网友分析结果图:

《微信对网络影响的技术试验及分析(论文全文)》

《开发流年:记录微信3.0版头上的故事(距微信1.0发布9个月时)》

《微信团队原创分享:Android版微信从150KB到150MB的技术演进》

对于Android来说,实现这条规则何必 难,要么是改造系统TextView,要么另一方写个自定义view实现文字排版及渲染,最后亲戚亲戚大伙儿采用了后者同类于于方案。

《另有4个 微信实习生自述:我眼中的微信开发团队》

《微信团队原创分享:微信客户端SQLite数据库损坏修复实践》

《iOS版微信安装包“减肥”实战记录》

应该有好多好多 Android的用户熟悉里边这图。

《月活8.89亿的超级IM微信是要怎样进行Android端兼容测试的》

《微信海量用户头上的后台系统存储架构(视频+PPT) [附件下载]》

下图是实验数据:

根据该女网友的推敲,此次卡死的真正原因在于:“同类于于wwk是始终等于0的,也已经 不满足while实物的dVar2的置空条件,也就造成了while死循环”。这里具体为什么么做到动态反编译的?

《微信团队原创分享:Android内存泄漏监控和优化技巧总结》

《微信后台基于时间序的海量数据冷热分级派发实践》

《微信Mars:微信实物正在使用的网络层封装库,即将开源》

《技术流年:史上最全QQ图标变迁过程,追寻IM巨人的演进历史》

从微观上:通过函数进行对比,CellTextView对比系统TextView性能稍差2倍,主要差距在于绘制文字时都要单字调整间距;

(本文同步发布于:http://www.52im.net/thread-1099-1-1.html)

详情可参考链接:http://androidwing.net/index.php/243

没人 ,iOS的排版有无已经 完美的呢,真是仔细观察何必 没人 ,从上图可不都要看出,除了Android,iOS也会有同类于于大疑问,那已经 气泡中的文字左右参差不齐。

《一份微信后台技术架构的总结性笔记》

文章写得不好的地方,望见谅,大神莫喷莫喷。小弟帮我背锅去面壁了。

《移动端IM实践:iOS版微信的多设备字体适配方案探讨》

回归正题,亲戚亲戚大伙儿对系统TextView的规则进行对比,最后亲戚亲戚大伙儿挑选了以下十哪几个 规则:

《技术流年:创业初期的腾讯——16年前的冬天,谁动了马化腾的代码》

《移动端IM实践:WhatsApp、Line、微信的心跳策略分析》

那既然要动态调整字体间距,是都是可不都要一味的没人 做就可不都要?答案当然都是,肯能没人 做就像‘硬对齐办法’一样,显得过于生硬了。

《微信团队原创分享:Android版微信的臃肿之困与模块化实践之路》

一始于英语 英语 亲戚亲戚大伙儿怀疑,会无需是微信应用两种 使用该组件不当的原因造成,而非系统组件的大疑问。于是乎,在手机上,亲戚亲戚大伙儿随便找了而且 热门app,仔细对比,同样的大疑问依然所处。

《全面总结iOS版微信升级iOS9遇到的各种“坑”》

《微信团队原创Android资源混淆工具:AndResGuard [有源码]》

好多好多 女网友也始于英语 英语 讨论,为哪些要另一方排版,放着好端端的系统TextView无需?到底好在哪里?效果是为什么么样的?

《Android版微信从150KB到150MB的技术演进(PPT讲稿) [附件下载]》

《移动端IM实践:Android版微信要怎样大幅提升交互性能(一)》

《微信亲戚亲戚大伙儿圈海量技术之道PPT [附件下载]》

《以手机QQ为例探讨移动端IM中的“轻应用”》

《微信技术总监谈架构:微信之道——大道至简(PPT讲稿) [附件下载]》

《开发流年:微信千年不变的那张闪屏图片的由来》

下图为word的居中‘软’对齐效果:

《信鸽团队原创:一起走过 iOS10 上消息推送(APNS)的坑》

《微信团队原创分享:Android版微信后台保活实战分享(网络保活篇)》

通过以上的尝试及灰度结果来看,做同类于于事情真是是很有意义的,没人 最后也公布下了同类于于优化方案。

《微信“红包照片”头上的技术大疑问》

知乎:

下图为word的左对齐效果,也已经 Android的TextView默认对其办法:

2、对于标点符号尽量规避不老会 出现 在行首;

《微信后台团队:微信后台异步消息队列的优化升级实践分享》

下图为word的居中‘硬’对齐效果:

于是亲戚亲戚大伙儿针对同类于于大疑问,进行了一轮灰度,灰度的结果如下:

原因在于:

>>更多同类于文章 ……

《腾讯原创分享(二):要怎样大幅压缩移动网络下APP的流量消耗(下篇)》

《首次揭秘:QQ实时视频聊天头上的神秘组织》

原因有三:

1)其一:从Android 2.3到Android 8.0,TextView的代码虽说变化无需很大,但从Layout来看,实现的逻辑肯能接口也好都是所变更,肯能通过同类于于办法,代理的兼容性会是另有4个 大疑问;

《微信团队原创分享:Android版微信后台保活实战分享(线程池池保活篇)》

《快速裂变:见证微信强大后台架构从0到1的演进历程(一)》

该函数返回了另有4个 对象a其蕴含 另有4个 参数,另有4个 是断句的位置(a.wwk),及断句后的文字长度(a.width),主已经 肯能在判断换行的前一天,肯能考虑到标点符号不应该所处行首这条规则,都要将当前行最后另有4个 非标点符号截断到下一行,而截断受另外四根规则限制,截断不可不都要为英文肯能数字,这原因“15。。。。。。。。。。。。。。。”最后返回截断的位置为0,并将结果返回,好多好多 才产生了死循环,造成同类于于bug。

3)其三:实际上另一方实现另有4个 Layout,基本上就实现了另有4个 显示组件,排版和渲染都是要处里的,好多好多 没人 实现的意义不大,甚至反而不灵活。

继续追根问底:是哪些原因造成断句算法老会 返回0呢,实际上断句算法是调用了以下同类于于函数:

整个需求的来龙去脉已经 没人 子的,真是梳理同类于于过程的来龙去脉来,一来可不都要让另一方不断反思该过程所处的而且 大疑问,二来呢,肯能本次bug真是对亲戚亲戚大伙儿造成了不好的影响(真的是深感歉意啊!),可不都要让亲戚亲戚大伙儿清楚同类于于事情是为什么么所处的,离米 亲戚亲戚大伙儿无需卡得不明不白的。

而实际上,同类于于简单的正则表达式,如该女网友测试的一样,处里起来更快,基本都是1ms内,对性能的影响可忽略。通过正则去判断后,肯能是可处里的字符串则应用里边的规则进行排版,肯能是特殊的字符串,则用系统的TextView代理显示。

(原文链接:点此进入)

最后一张是应用了4条规则的效果图,整体文字的对齐效果比系统默认的排版改善了不少。

《开发流年:角度讲述2010到2015,微信一路风雨的头上》

而dVar2同类于于值为null的条件取决于下面同类于于函数:

亲戚亲戚大伙儿就同类于于大疑问跟设计组的同事进行讨论,通过亲戚亲戚大伙儿的调研及尝试,得出了另有4个 合理的方案,那已经 最多允许有另有4个 英文字符角度的调整范围,将调整的角度平均分配到当前行每个字符中去,对用户来说影响是最小的,一起也保持了一定的美观。

不着急,诸多大疑问的来龙去脉得容小弟一一道来。

于是亲戚亲戚大伙儿始于英语 英语 进行简单的demo实现。效果如下图:

《微信异步化改造实践:8亿月活、单机千万连接头上的后台处里方案》

那既然效果是不错的,有无所处而且 大疑问?真是没人 。

掘金:

《腾讯信鸽技术分享:百亿级实时消息推送的实战经验》

国庆前几天,微信Android血块用户反馈接收或发送同类于“15。。。。。。。。。。。。。。。”信息会原因微信聊天界面卡死,线程池池崩溃。这对微信来说是很严重的事情啊,一时半会反馈也铺天盖地的过来,亲戚亲戚大伙儿得知同类于于大疑问后,第一时间对同类于于大疑问进行了紧急修复并在多日内覆盖了全网大每段用户,最终同类于于大疑问得到了处里。追根溯源,毫无大疑问这锅开发小弟来背,这次只有冤枉了产品MM哈哈。

《QQ 18年:解密8亿月活的QQ后台服务接口隔离技术》

《技术流年:“QQ群”和“微信红包”是为什么么来的?》

[1] 有关QQ、微信的技术文章:

《如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源》

《移动端IM实践:iOS版微信界面卡顿监测方案》

《Android版微信安装包“减肥”实战记录》

对比优化前的效果,真是没人 做效果是明显的。但仔细观察,还是会发现,对于而且 特殊的中文全角符号(如,《》()【】等)肯能有多余的padding所处,倒入行首和行末也会原因参差不齐的效果。

肯能微信对小语种是支持的,对于而且 特殊的小语种,如泰语,阿拉伯语等,泰语的排版办法何必 简单的横排,字符与字符之间是有上下关系的,而对于阿拉伯语,是从右往左排列的。肯能已经 按里边所讲的十哪几个 规则,没人 排版后的效果肯定是不合理的。

最后贴上一张优化后的效果图:

既然小语种的大疑问可不都要处里,但这里又产生另有4个 大疑问,现网上的用户, 使用特殊字符的频率多高?这大疑问直接关系到亲戚亲戚大伙儿同类于于排版组件的适配率,也已经 对用户体验改善十哪几个 ?在亲戚亲戚大伙儿看来,一般人何必 会发些奇奇特别符号在微信里边,好多好多 能应用上同类于于排版规则的应该占大多数。当然这里已经 猜想,肯能没人 挑选可行性也太草率了。

从效果图看,iOS真是比Android好看后些,离米 最右边何必 会有多余的padding没人 明显,简单来说多余的padding产生的原因是气泡角度受屏幕大小的限制,好多好多 这里TextView即是气泡有了最大的角度限制,当剩下的空间不足以容下另有4个 字符时,系统排版会挑选自动换行,原因了同类于于大疑问的产生。

系统TextView真正排版及绘制的逻辑没人 了其两种 ,已经 交给另有4个 继承了Layout的子类负责,分别为StaticLayout、DynamicLayout、BoringLayout,亲戚亲戚大伙儿更常用的是StaticLayout,它只负责静态的文字处里,关于各自 Layout的区别,这里了就不展开讲了。系统TextView并没人 暴露接口去代理它们。当然没人 接口不原因做只有,亲戚亲戚大伙儿全部可不都要通过反射等手段代理它,但真是没人 做励志的话 ,代价是比较大的。

《微信团队原创资源混淆工具:你可不都要的APK立减1M》

那事实有无没人 呢?亲戚亲戚大伙儿对iOS和Android进行了对比,如下图:

对于文字排版,这容易你可不都要想起,“我的(word)哥”,微软对于这款应用,有没人 而且 文字左右对齐的手段肯能方案可不都要参考呢?

《腾讯原创分享(一):要怎样大幅提升移动网络下手机QQ的图片强度和成功率》

支付宝:

等等。。。

《微信客户端团队负责人技术访谈:要怎样着手客户端性能监控和优化》

《腾讯原创分享(二):要怎样大幅压缩移动网络下APP的流量消耗(上篇)》

>>更多同类于文章 ……

《开源libco库:单机千万连接、支撑微信8亿用户的后台框架基石 [源码下载]》

得出结论:

肯能该组件的性能跟系统相差不多,甚至严重影响帧率,造成用户卡顿,这当然也是不可取的。亲戚亲戚大伙儿针对同类于于大疑问,进行了本地的自动化帧率测试及与系统TextView进行函数间的对比。

从宏观上:CellTextView对实际帧率的影响较小,用户无明显感知性能变差。

从同类于于效果上看,“软对齐办法”更美观,体验最好。于是亲戚亲戚大伙儿能想到的已经 动态调整字间距的办法来实现同类于于效果(word也是没人 实现的)。

《微信团队披露:微信界面卡死超级bug“15。。。。”的来龙去脉》

写代码万万要小心谨慎,考虑周全啊。这次痛定思痛,吃一堑,长一智吧。愿天下的线程池池好多好多 没人 bug。对,好多好多 没人 !

对而且 常见的有多余padding的全角符号所处行首或行末时,默认减去多余的padding来达到更好的对齐效果。

《移动端IM实践:实现Android版微信的智能心跳机制》

而且 除了移动端,pc端同样都是诸类大疑问。结合里边哪些对比,真是市面上大每段应用都所处同类于于大疑问。通过这次反馈,亲戚亲戚大伙儿也始于英语 英语 在思考可不都要在移动客户端的文字排版上做得更人性化而且 ,体验上更好?。就同类于于大疑问,亲戚亲戚大伙儿找了设计的同学一起探讨,认为真是有同类于于必要。于是就始于英语 英语 有了下一步。

《快速裂变:见证微信强大后台架构从0到1的演进历程(二)》

《一篇文章get微信开源移动端数据库组件WCDB的一切!》

实际上,世界上大每段需求都源于用户。这需求还得得益于前一天有十哪几个 用户会反馈说“微信Android的聊天气泡好像没人 iOS的美观,比较死板”。同类于于大疑问也引起了亲戚亲戚大伙儿的关注。

考虑到小语种所处多样性,排版规则不统一,而且 使用小语种用户比例小,但已经 要让其排版错误不管,好多好多 对于同类于于具体情况,亲戚亲戚大伙儿通过另有4个 简单的正则表达式去匹配有无属于能处里的字符串范围内,这已经 为哪些有女网友分析”15。。。。。。。。”同类于于事件时,一始于英语 英语 会怀疑是正则匹配耗时造成的。

《要怎样解读《微信技术总监谈架构:微信之道——大道至简》》

《移动端IM实践:Android版微信要怎样大幅提升交互性能(二)》

《移动端IM实践:iOS版微信小视频功能技术方案实录》

3、对于英文单词或数字不截断排版。

1、最多允许有另有4个 字母字符角度的来调整字间距;

《微信新一代通信安全处里方案:基于TLS1.3的MMTLS详解》

(本文同步发布于:http://www.52im.net/thread-1099-1-1.html)

“i4”变量实际是断句算法返回截断的实际位置,dvar2.getLength()实际是当前行的文字长度,这里肯能断句算法的bug,造成了”i4”同类于于变量老会 返回0,而当前行文字长度dvar2.getLength()是>0的,好多好多 同类于于dVar2永远无需被赋值为空。

肯能dVar2且dVar2.getText老会 不为空,老会 满足同类于于条件,好多好多 造成死循环。

[2] 有关QQ、微信的技术故事:

与此一起,好多好多 热心的女网友也始于英语 英语 分析原因,25号当日都是行内大神通过ANR日志和反编译debug,一步步推敲出此次ANR的根源,给出了卡死的原因。请受小弟一拜,真是佩服佩服!

真正的原因真是如女网友分析的,主已经 卡在了同类于于while循环里边,同类于于循环的主要作用是将当前文字内容按具体的规则进行断句排版,见下图。

通过这次灰度,现网用户能应用上该组件适配的具体情况达到了预期的结果。