【问题标题】:Output delayed from Cordova PluginCordova 插件的输出延迟
【发布时间】:2013-03-08 12:13:19
【问题描述】:

我编写了一个 Cordova 插件来下载文件并将其保存在数据文件夹中。除了返回值外,一切正常。我想显示一个进度条并需要获取当前进度。这是我的代码中的相关部分:

 while ((readed = is.read(buffer)) > 0) {
     fos.write(buffer, 0, readed);
     totalReaded += readed;

     int newProgress = (int) (totalReaded*100/fileSize);
     if (newProgress != progress) {
         progress = newProgress;
         PluginResult res = new PluginResult(PluginResult.Status.OK, progress);
         res.setKeepCallback(true);
         callbackContext.sendPluginResult(res);
     }
  }

我的 JavaScript:

downloader.prototype.writeFile = function (downloaderSuccess, downloaderFailure, options) {
    cordova.exec(downloaderSuccess, downloaderFailure, "downloader", "writeFile", options);
};

function downloaderSuccess(progress) {
    WL.Logger.debug("Result: "+progress)
}

function downloaderFailure(error) {
    WL.Logger.error("Error: "+error);
}

发生的情况是,只有在文件下载后才会输出进度。如果我将 PluginResult.Status 设置为 NO_RESULT,它根本不会输出任何内容。

【问题讨论】:

    标签: android cordova ibm-mobilefirst


    【解决方案1】:

    你在用吗

       cordova.getThreadPool().execute(new Runnable() {
                public void run() {
                    // while loop goes here
                }
            });
    

    在下载代码的开头?

    看看src/org/apache/cordova/FileTransfer.java。该文件几乎可以完成您正在做的事情,您可以看到它们如何能够发送实时进度更新,因为它们位于单独的线程中。

    我认为问题在于 JavaScript 和 Java 代码run in the same WebCore thread,所以下载会阻塞 Java 和 UI 之间的通信(例如,发送结果),直到下载完成。

    如果您遵循该指南中关于不阻塞 WebCore 线程的建议(因此,请使用:cordova.getThreadPool().execute()),您将能够获得进度更新。

    为了测试这个,我使用了这个插件:https://github.com/phonegap/phonegap-plugins/blob/master/Android/Downloader/Downloader.java 文件下载。就目前而言,此代码的行为与您的代码相同 - 仅在下载文件后发送进度更新。但是,一旦我将 downloadUrl() 方法包装在可运行文件中,它就可以正常工作,在更新发生时发送进度更新,而不是等到结束。

    如果这有帮助,或者您希望我提出更好的解释,请告诉我。

    【讨论】:

    • 感谢您的回答。我最终改用了 Phonegap 下载功能,但将我指向 cordova.getThreadPool 对应用程序的其他部分很有用 :)
    • 不客气,很高兴你能想出办法!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    相关资源
    最近更新 更多