我正在尝试优化我的混合应用程序,目前仅在Android上运行。我的应用程序需要解压缩平均大小为2MB的许多文件,然后使用Cordova插件将它们传递给JavaScript。
我的应用程序的本机(Java)部分,读取存储在文件夹中的所有文件,解压缩它们并将它们作为字节数组发送回JavaScript(如果有50个文件,我将插件调用50次)。完成此传输后,应用程序将完全平稳运行,因为所有内容都已缓冲。但是当这个传输完成后,我的主线程被阻止了。
我想显示淡出文字("Loading...")
,但整个用户界面都会冻结。在本机部分我使用ThreadPool,这就是为什么我确定问题出在我的JavaScript中,可能是从本机部分复制所有这些字节数组。我试图使用Web Worker,但我发现我无法通过它调用Cordova。
是否可以使用来自Web Worker的cordova.exec
来调用Java。我的另一个想法是实际将解压缩的文件存储在SD卡上并让JavaScript从那里读取它们,但我确信我将面临一些安全限制,即使没有任何安全限制,读取50个文件也会阻塞线程无论如何。你有什么建议可以给我。
提前致谢!