【问题标题】:iOS UI freezes during file writing with PhoneGap/CordovaiOS UI 在使用 PhoneGap/Cordova 写入文件期间冻结
【发布时间】:2014-10-07 09:39:35
【问题描述】:

我正在使用标准的 PhoneGap 插件通过 HTML5 写入本地文件。在后台,我的应用程序正在从服务器下载数据,然后将其保存到磁盘中。典型的文件大小约为 20Mb。

如果用户在书写时滚动屏幕或其他一些 UI 操作,我的应用程序将在运行 iOS7 的 iPad 2 上冻结一两秒。文件写入操作包含在 setTimeout 调用中(因此它不会阻塞主线程)但这似乎没有帮助。

XCode 控制台在文件写入过程中报告此情况(延迟感觉像是发生了大约 1 秒或 2 秒,而不是此处暗示的 200 毫秒):

线程警告:['File'] 花费了 '93.378906' 毫秒。插件应该使用后台线程。 线程警告:['File'] 花费了 '125.793945' 毫秒。插件应该使用后台线程。

我可以做些什么来避免延迟?如何诊断延迟发生在哪里?

【问题讨论】:

    标签: javascript ios cordova fileapi


    【解决方案1】:

    setTimeout 结束文件写入操作并不能阻止主线程被阻塞,你从哪里得到的?它只是延迟了包装函数的执行,在你的情况下这对你没有帮助。

    尽管如此,我什至不认为这是你真正的问题,因为文件插件的写操作已经是wrapped up for execution in a background thread,它告诉你来自iOS插件源代码的链接行。

    我猜还有其他一些事情正在发生,这会阻塞你的 UI 线程。您正在调用插件中的哪些功能?尝试调试/分析整个过程,当 UI 滞后发生时,例如在 Safari 远程调试器中。

    如果这对您没有帮助,您应该发布更具体的代码,这些代码可以提供一些关于正在发生的事情和问题可能是什么的提示。

    【讨论】:

    • 谢谢,这是一个复杂的应用程序,所以我不知道从哪里开始说实话。所以我的文件编写代码是基于这里的示例docs.phonegap.com/en/3.3.0/cordova_file_file.md.html。它正在编写一个大约 10Mb 的 JSON 对象。一次发送这么多数据可能有什么陷阱吗?也许是垃圾收集?它在运行 iOS 7 的 iPad 2 上运行非常滞后,但运行 iOS 8 的 iPad Air 几乎没有任何滞后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多