搜狗输入法双击输入框崩溃问题 | 京东云技术团队
前言:
每当到618、双11这样大促的时候,搜索作为整个App的核心功能,不仅担当着流量入口,还承载着用户感知到这个产品在导购场景中的服务与体验,所以保障搜索以便更好的助力618大卖。
现象:
搜狗输入框双击调起键盘crash
监控平台:
监控平台检测到大量的crash,现象都为在极短的时间间隔内键盘响应问题
心路历程:
- 通过观察现象,猜测应该是用户通过微信或别的软件中复制关键词,然后来到京东万商进行粘贴搜索功能。可能由于一些原因(未弹出复制权限提示弹窗)导致搜索框没有出现粘贴功能,此时用户疯狂双击输入框导致的。于是开始测试市面上的App,以京东App为例,复现步骤如下:
- 测试结果如下表:
App | 是否崩溃 | 频率 |
---|---|---|
京东 | 是 | 高 |
京东万商 | 是 | 高 |
七鲜 | 是 | 高 |
淘宝 | 否 | |
支付宝 | 是 | 中 |
百度 | 是 | 中 |
百度地图 | 否 | |
美团 | 否 | |
盒马 | 否 | |
1688 | 否 | |
哔哩哔哩 | 否 | |
抖音 | 是 | 低 |
- 通过手机隐私拿到的崩溃日志,分别为京me、京东、百度,表现与SGM平台表象一样
源码调试:
- 通过Xcode断点调试结果如下图:
- UICompatibilityInputViewController过度release
- crash在
_wantsForwardingFromResponder:toNextResponder:withEvent
解决方案:
- 通过runtime对给crash方法一个默认的实现
static BOOL (*originalImpl)(id, SEL, UIResponder*, UIResponder*, UIEvent* ) = nil; - (BOOL)_wantsForwardingFromResponder:(UIResponder *)arg1 toNextResponder:(UIResponder *)arg2 withEvent:(UIEvent *)arg3 { NSString* responderClassName = NSStringFromClass([arg2 class]); if ([responderClassName isEqualToString:@"_UIRemoteInputViewController"]) { bool isDeallocating = false; // isDeallocating = _objc_rootIsDeallocating(arg2); // Use 'performSelector' when u are develop a App-Store App. #pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks" SEL sel = NSSelectorFromString(@"_isDeallocating"); isDeallocating = [arg2 respondsToSelector:sel] && [arg2 performSelector:sel]; #pragma clang diagnostic pop if (isDeallocating) { NSLog(@"BingGo a deallocating object ..."); return true; } } BOOL retVal = FALSE; if (originalImpl == nil) { IMP impl = [ObjcSeeker seekInstanceNextOirignalImpl:self selector:_cmd]; originalImpl = (BOOL (*)(id, SEL, UIResponder*, UIResponder*, UIEvent* ))impl; } if (originalImpl != nil) { retVal = originalImpl(self, _cmd, arg1, arg2, arg3); } return retVal; }
参考链接:
https://github.com/SnowGirls/Objc-Deallocating
作者:京东零售 涂世展
来源:京东云开发者社区

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
你的Spring应用启动很慢?不妨试试这个工具!
睡不着闲逛,在GitHub上看到一个挺实用的开源项目:Spring Startup Analyzer。 从项目名称中就大概能猜到,这是一个分析Spring应用启动过程的工具。Spring Startup Analyzer通过采集Spring应用启动过程的数据,进而生成一个交互式的分析报告,帮助用户发现Spring应用启动慢的位置。 同时,Spring Startup Analyzer还提供了Spring Bean异步初始化的工具,来帮助开发者加快Spring应用的启动时间。 下面一起来看看其提供的强大功能。 分析能力 我们可以先从该项目中给出HTML样例报告来看看它所提供的分析功能。感兴趣的可以通过下面链接访问: https://linyimin-blog.oss-cn-beijing.aliyuncs.com/spring-satrtup-analyzer/hokage-20230618000928-192.168.0.101-analyzer.html 把报告内容的细节部分都收起来,可以看到如下图所示的内容: 主要有六个部分: 启动的统计数据。其中包括:启动时间、Bean的数量、使...
- 下一篇
CRM系统化整合从N-1做减法实践 | 京东物流技术团队
1 背景 京销易系统已经接入大网、KA以及云仓三个条线商机,每个条线商机规则差异比较大,当前现状是独立实现三套系统分别做支撑。 2 目标 2022年下半年CRM目标是完成9个新条线业务接入,完成销售过程线上化,实现销售规则统一。 3 问题 前端实现数据存储与逻辑代码耦合一起,无法复用,无法扩展,组件化拆分难度大。 组件拆分颗粒度较大,业务功能抽象不充分,缺乏复用性。 代码重复编写,相似功能冗余严重,开发和维护效率低。 代码版本多,接口不统一,开发、运维成本高,难扩展。 每个条线阶段、条线内每个商机阶段推进规则都是通过代码单独实现,开发、维护成本高,规则调整都需要代码调整并上线,时效性低,同时阶段规则维护在代码中,无法直观呈现和规则统一收口,运维难度大。 4 实现 4.1 方案调研 方案调研阶段,针对业务场景,多次组会对于底层实现方案进行充分讨论,列举每个方案优劣势,选择最适合当前业务场景的解决方案,最终选择上图的框架升级方案。 4.2 方案设计 4.2.1 设计思路 快速实现相似业务,减少相似代码,通过前端组件化、后端服务标准化、商机阶段配置化技术手段,支持各条线快速复用和灵活扩展。 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 2048小游戏-低调大师作品
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块