在 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 App 上集成 Android 服务
尝试在 android (Nativescript-vue) 上使用 RadListView 时出现 Webpack 错误