使用PhoneGap / Cordova在文件写入期间iOS UI冻结

时间:2014-10-07 09:39:35

标签: javascript ios cordova fileapi

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

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

当文件写入正在进行时,XCode控制台报告此情况(滞后感觉就像它发生了大约一秒钟或2秒而不是这里隐含的200毫秒):

线程警告:['文件']花了'93 .378906'毫秒。插件应该使用后台线程。 线程警告:['文件']花了'125.793945'毫秒。插件应该使用后台线程。

我可以做些什么来避免滞后?如何诊断滞后发生的位置?

1 个答案:

答案 0 :(得分:0)

使用setTimeout完成文件写入操作并不会阻止主线程被阻塞,你从哪里得到它?它只是延迟了包装函数的执行,在你的情况下根本没有帮助你。

然而,我甚至认为这不是你真正的问题,因为文件插件的写操作已经是wrapped up for execution in a background thread,它告诉你iOS插件源代码中的链接行。

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

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