在 NativeScript 中后台运行任务

Posted

技术标签:

【中文标题】在 NativeScript 中后台运行任务【英文标题】:Run tasks in background in NativeScript 【发布时间】:2016-09-05 19:55:21 【问题描述】:

我正在使用 NativeScript 2.0,并且正在开发一个 Android 模块不允许在主线程中运行!! p>

有没有可以用来在后台线程中运行函数的模块?

或者是否可以在“原生”javascript 代码(不是 TypeScript!)中使用类似 AsyncTask 的类?

【问题讨论】:

【参考方案1】:

nativescript 添加了网络工作者。 https://docs.nativescript.org/angular/core-concepts/multithreading-model.html

var worker = new Worker('myWorker');
worker.postMessage('hello');
worker.onmessage = function(msg) 
      console.log('answer from worker',msg.data);

在工作人员myWorker.js

    require('globals'); // necessary to bootstrap tns modules on the new thread
    onmessage = function(msg) 
        postMessage('bye');
    

【讨论】:

我正在尝试运行您的代码,但每次都显示 ---> 找不到变量:Worker.. 有什么想法吗? 您是否将项目更新到最新版本?因为最近添加了工作人员。 是的。我还可以看到 Worker 类。 我正在获取方法建议。我需要在哪里设置吗? eg-(组件需要添加到 app.module.ts -> @NgModule ) @HabibKazemi 感谢您的回答!前段时间,我实现了模块nativescript-tasks,它让NativeScript 中的WebWorkers 的新概念更容易使用。【参考方案2】:

背景可以看这篇文章:http://developer.telerik.com/featured/benefits-single-threading-model-nativescript/

也就是说,目前你最好的选择是使用这个模块来实现和运行 WebWorkers:https://github.com/NathanaelA/nativescript-webworkers

【讨论】:

【参考方案3】:

我认为你的答案可以在这篇文章中找到http://developer.telerik.com/featured/benefits-single-threading-model-nativescript/

基本上,当前支持的唯一选项是将代码封装到用原生 android 编写的插件中。该团队正在努力支持某种类似于 Web Worker 的线程选项,但目前没有任何支持。

【讨论】:

该链接不再可用。【参考方案4】:

正如 Nativescript demo App 所证明的那样,单线程模型很好,因为在 UI 线程上运行一切都非常快。但是如果你需要后台任务以防耗时操作,Nativescript 引入了Workers API。

我们知道这是网络世界中的网络工作者。请务必记住,每次启动新的工作线程时,都会增加应用的资源和内存占用。

更多阅读可以参考this博客。

【讨论】:

【参考方案5】:

你应该看看网络工作者:

Web Workers 为 Web 内容在后台线程中运行脚本提供了一种简单的方法。工作线程可以在不干扰用户界面的情况下执行任务。

在此处查看更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers

【讨论】:

问题是关于 NativeScript - 而不是 web。

以上是关于在 NativeScript 中后台运行任务的主要内容,如果未能解决你的问题,请参考以下文章

使用 NativeScript 的 Android 持续后台服务

如何在 nativescript 中设置方向

在 NativeScript App 上集成 Android 服务

尝试在 android (Nativescript-vue) 上使用 RadListView 时出现 Webpack 错误

NativeScript 中的 Card.io - thinkdigital-nativescript-cardio

在 iOS 中定期在后台线程中运行任务