写点什么

搜狗输入法双击输入框崩溃问题 | 京东云技术团队

  • 2023-07-24
    北京
  • 本文字数:1094 字

    阅读完需:约 4 分钟

搜狗输入法双击输入框崩溃问题 | 京东云技术团队

前言:

每当到 618、双 11 这样大促的时候,搜索作为整个 App 的核心功能,不仅担当着流量入口,还承载着用户感知到这个产品在导购场景中的服务与体验,所以保障搜索以便更好的助力 618 大卖。

现象:

搜狗输入框双击调起键盘 crash

监控平台:

监控平台检测到大量的 crash,现象都为在极短的时间间隔内键盘响应问题



心路历程:

  • 通过观察现象,猜测应该是用户通过微信或别的软件中复制关键词,然后来到京东万商进行粘贴搜索功能。可能由于一些原因(未弹出复制权限提示弹窗)导致搜索框没有出现粘贴功能,此时用户疯狂双击输入框导致的。于是开始测试市面上的 App,以京东 App 为例,复现步骤如下:




  • 测试结果如下表:


  • 通过手机隐私拿到的崩溃日志,分别为京 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


作者:京东零售 涂世展

来源:京东云开发者社区

发布于: 刚刚阅读数: 3
用户头像

拥抱技术,与开发者携手创造未来! 2018-11-20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东云开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
搜狗输入法双击输入框崩溃问题 | 京东云技术团队_搜索引擎_京东科技开发者_InfoQ写作社区