在第三代 iPad(wifi/AT&T 蜂窝)上的内容可编辑 UIWebView 中键入文本几分钟后,键盘的反应越来越慢,直到应用程序不再可用。(在 iOS 5.x 和 iOS6 下测试)。这个错误已经提交给苹果,我没有得到任何消息。这是问题所在。
在内容可编辑的 UiWebView 中,用户开始在键盘上键入。您可以键入 2 到 10 分钟,或者键入一些文本,然后在应用程序仍处于前台时暂停键入
延迟一段时间后,键盘的反应时间越来越慢,直到完全没有反应。应用程序没有崩溃(添加断点会使应用程序暂停),但是无法输入文本,除了强制退出并重新加载应用程序之外没有其他解决方案。
在 iOS 6 模拟器上不会出现此问题。iPad(第 3 代)于今年早些时候在法国购买,配备 64GB Wifi 和 Cellular/AT&T
这个问题也出现在 iOS 5 中。
我的应用程序创建了一个 NSTimer,它每 0.8 秒触发一次以调用 scroll: 专用于垂直滚动的方法(如有必要)。减少 NSTimer 触发延迟会加速问题的产生。
禁用滚动:方法时,不会发生此问题。似乎 UIWebView 中调用的 javascript 创建了永不停止的进程,因此它占用了越来越多的 CPU 时间,从而导致应用程序最终变得无响应(参见第 5 点)。
- 在 Instruments 应用程序中使用 Time profiling,我注意到当应用程序正常运行时,主要耗时的方法是 [WebFrame(WebInternal) stringByEvaluatingJavaScriptFrom String:forceUserGesture] 函数(每次调用滚动大约需要 6 到 8 毫秒: 方法。但是当应用程序的响应性开始下降时,三种方法往往会主导时间剖面,消耗的时间继续快速增加,时间剖面图显示 iPad 上没有按键时全时活动。这里给出了相关的数字:
[WebVisiblePosition withinTextUnitOfGranularity:inDirectionIfAtBoundary](总运行时间的 40%,在用户不活动 10 分钟后)
[WebHTMLView(WebNSTextInputSUpport) insertText:] (总运行时间的 29%,在用户不活动 10 分钟后)
[WebVisiblePosition enclosingTextUnitOfGranularity:inDirectionIfAtBoundary](总运行时间的 16%,在用户不活动 10 分钟后)
有没有人必须处理这样的问题。能否针对该问题设计周转方案?