Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 由于计算量大,Cordova应用程序阻塞_Android_Ios_Multithreading_Cordova_Web Worker - Fatal编程技术网

Android 由于计算量大,Cordova应用程序阻塞

Android 由于计算量大,Cordova应用程序阻塞,android,ios,multithreading,cordova,web-worker,Android,Ios,Multithreading,Cordova,Web Worker,我正在编写一个Cordova应用程序,其中有些计算有点太重(数字签名)。因此,当单击启动这些计算的按钮时,UI会冻结一瞬间 计算也是javascript代码,在Cordova中是否有任何方法可以使用web worker或其他等效工具并将其卸载到另一个线程?您可以使用web worker在不同的线程上执行intensve JS处理,这样就不会阻塞UI线程。 注意:您需要使用现代的网络视图,所以如果目标是Android 4.x,那么Crosswalk(Android 5+应该可以,因为它可以自我更新

我正在编写一个Cordova应用程序,其中有些计算有点太重(数字签名)。因此,当单击启动这些计算的按钮时,UI会冻结一瞬间


计算也是javascript代码,在Cordova中是否有任何方法可以使用web worker或其他等效工具并将其卸载到另一个线程?

您可以使用web worker在不同的线程上执行intensve JS处理,这样就不会阻塞UI线程。 注意:您需要使用现代的网络视图,所以如果目标是Android 4.x,那么Crosswalk(Android 5+应该可以,因为它可以自我更新网络视图)

您可以这样做:

myapp.js:

var worker = new Worker('my.worker.js');

// Receive the output from the worker when it's done
worker.addEventListener('message', function (e) {
    try {
        var data = e.data;

        if(!data.success){
            handleError(data.error);
        }else{
            display(data.output);
        }        
    } catch (ex) {
        handleError(ex);
    }
}, false);

// Start the worker with some input
worker.postMessage({
    input: "something heavy to process"
});
my.worker.js:

importScripts('lib/some.dependency.js');

// Receive the input from the main UI thread
self.addEventListener('message', function(ev) {
  try{
    var data = ev.data;
    var input = data.input;

    var output = doSomeHeavyLifting(input);

    self.postMessage({
      success: true,
      output: output
    });
  }catch(ex){
    self.postMessage({
      success: false,
      error: ex
    });
  }
}, false);

繁重的计算是用js或本机代码完成的?它是用javascriptI完成的,我将测试它是否有效。但你确定可以在Cordova应用程序中使用web workers吗?我没有找到关于这个主题的太多信息,但看起来网络工作者没有被实施/禁止。
你确定可以在Cordova应用程序中使用网络工作者吗。正面:我在一些高知名度的生产应用程序中使用了这种技术,包括Android和iOS。与Crosswalk/WKWebView配合使用效果很好:在总共约10万用户的用户群中,我几乎没有看到工作人员发生崩溃
看起来网络工作者没有被实施/禁止
——这一切都归结于运行Cordova应用程序的Webview,而现代Webview支持网络工作者。试试看。。。