Cordova 插件的输出延迟

2024-01-09

我编写了一个 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);
}

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


你正在用吗

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

在你的下载代码的开头?

看一下src/org/apache/cordova/FileTransfer.java https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/FileTransfer.java#L310。这些文件几乎完成了您正在做的事情,您可以看到它们如何发送实时进度更新,因为它们位于单独的线程中。

我认为问题在于 JavaScript 和 Java 代码在同一个WebCore线程中运行 http://docs.phonegap.com/en/2.5.0/guide_plugin-development_android_index.md.html#Developing%20a%20Plugin%20on%20Android所以发生的情况是下载阻塞了 Java 和 UI 之间的通信(例如,发送结果),直到下载完成。

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cordova 插件的输出延迟 的相关文章

随机推荐

  • ASP.NET MVC 2.0 JsonRequestBehavior 全局设置

    默认情况下 当操作尝试返回 JSON 以响应 GET 请求时 ASP NET MVC 2 0 现在将引发异常 我知道这可以通过使用 JsonRequestBehavior AllowGet 逐个方法地覆盖 但是是否可以在控制器或更高的基础上
  • .htaccess 将 https 重定向到 http 不起作用

    我正在尝试捕获到我的网站前面的任何 https 流量 因此 https www domain com 被重定向到 http www domain com 然而 其他子域需要重定向到其他地方 在大多数情况下 除了 https gt http
  • 域名指向单个页面

    我试图将域名指向单个页面 并保持域名相同 无重定向 因此 如果用户输入 www domain1 com au gt 将显示原始站点 如果用户输入 www domain2 com au gt 他们会显示 www domain1 com au
  • ubuntu:sem_timedwait 未唤醒 (C)

    我有3个进程需要同步 进程一执行某项操作 然后唤醒进程二并休眠 进程二执行某项操作 然后唤醒进程三并休眠 进程三执行某项操作 唤醒进程一并休眠 整个循环定时运行在 25hz 左右 由于在我的 真实 应用程序中触发进程二之前 外部同步到进程一
  • 使用CodeIgniter从mysql数据库中随机记录

    我在互联网上进行了研究 但找不到任何东西 我有一个 mysql 数据库 并在一个表中记录 我需要在每次页面加载时从该表中获取随机记录 我怎样才能做到这一点 有什么功能吗 欣赏 谢谢 已排序 关联 http www derekallard c
  • 在 Python 或 C++ 中单声道播放 Mp3

    我正在编码音乐播放器 https github com fabiomdiniz Gokya 2 The Super Gokya 在 python 中使用 pyqt 我希望它能够单声道播放 mp3 文件 我已经使用 pygame 完成了这一点
  • SQL 中的日期范围交集分割

    我有一个 SQL Server 2005 数据库 其中包含一个名为 成员资格 的表 表架构为 PersonID int Surname nvarchar 30 FirstName nvarchar 30 Description nvarch
  • 强制自动启动计算机?

    我们知道如何使用 Java 强制关闭计算机 例如 以下代码可以很好地强制关闭 public static void main String arg throws IOException Runtime runtime Runtime get
  • 为什么溢出:隐藏会为内联块元素添加额外的高度?

    In 这个例子 http jsbin com zowejokuluce 4 HTML div div foo bar div div CSS body html div height 100 margin 0 div div display
  • 为什么 std::fill(0) 比 std::fill(1) 慢?

    我观察到一个系统std fill在一个大的std vector
  • 如何在 JAX-WS 中添加响应标头?

    我有一个与此类似的方法 WebMethod public BeanResponse generar WebParam header true mode Mode INOUT name auditoria partName auditoria
  • 如何使用 RSpec 针对真实应用程序开发 Rails3 引擎?

    关于引擎开发以及使用虚拟应用程序进行测试的文章已经有很多 在我们的例子中 我们开发的引擎不是独立的实体 而是依赖于真实的 Rails 3 应用程序 我们仍然希望此代码存在于引擎中 而不是成为应用程序的一部分 因为引擎的工作是从拥有自己的表和
  • 按名称选择特定打印机 VB

    我制作了一个程序 该程序将在启动时运行 要求用户选择他们的默认打印机 该代码显示组合框中所有已安装的打印机 提交按钮会将组合框中选择的打印机设置为该用户的默认打印机 有没有办法只显示包含特定文本的打印机名称 例如 ABC printer1A
  • Python正则表达式选择所有不匹配模式的元素

    我昨天问了类似的问题保留 pandas 系列中带有模式的元素 而不将其转换为列表 https stackoverflow com questions 64958329 keep elements with pattern in pandas
  • Python:如何在 Windows 资源管理器上打开文件夹(Python 3.6.2、Windows 10)

    如果我将要打开的路径存储在名为 Finalpath 的字符串中 如下所示 2 8 电影 英语 虎胆龙威系列 那么我如何在 Windows 资源管理器中打开它 Windows 10 Python 3 6 2 P S 我知道很多人问过这个问题
  • 如何在 Android 中将字节数组写入文件?

    这是我创建文件的代码 public void writeToFile byte array try String path data data lalallalaa txt FileOutputStream stream new FileO
  • WordPress 自定义帖子类型搜索结果页面

    我设置了一个自定义搜索表单来搜索和显示自定义帖子类型的结果 形式为
  • next-auth 中 useSession() 的“加载”返回值是什么?

    我正在编写一个 Next js 项目 并使用 GitHub 和实现身份验证next auth 在以下示例中next auth 有一个电话useSession 它返回两个对象 session and loading 然而 我见过的例子都没有实
  • 使用 HERE API 获取我的位置时出现问题(Wifi)[已更新]

    我在我的平板电脑上安装了 HERE 测试产品 这是一款旧的 Android 5 1 平板电脑 没有 GPS 或蜂窝数据 只有 Wifi 并且它可以很好地 大约 使用 Wifi 提供我的位置 所以我尝试在我的应用程序中进行相同的编程 下载了
  • Cordova 插件的输出延迟

    我编写了一个 Cordova 插件来下载文件并将其保存在数据文件夹中 除了返回值之外 一切都工作正常 我想显示一个进度条并需要获取当前进度 这是我的代码中的相关部分 while readed is read buffer gt 0 fos