HarmonyOS 鸿蒙Next worker 如何传参数?
HarmonyOS 鸿蒙Next worker 如何传参数?
主线程向worker 线程如何传多个参数,多个字符串,数字?主线程如何接受子线程的返回值两个boolean值,可以提供一个样例参考么?官方文档没有特别复杂的传参
2 回复
这边写了一个demo,你参考一下
Index1.ets
import worker, { MessageEvents } from '@ohos.worker';
export class StudentInfo {
id: number = 0
name: string = ''
age: number = 1
salary:number = 0
gender:boolean = false
}
export const nameArr = ['jack','tom','anlay','jany','lili','Aaron','Ben','Brandon','Cody','Mason']
const gworkerInstance = new worker.ThreadWorker("entry/ets/workers/GlobalWorker.ets");
let context = getContext()
@Entry
@Component
struct Index1 {
@State list: StudentInfo[] = [];
aboutToAppear(): void {
gworkerInstance.postMessage({code:99,data:1});
gworkerInstance.onmessage = (e:MessageEvents):void=>{
if(e.data.code == 101){
this.list = e.data.data
}
}
}
build() {
Row() {
Column() {
Row(){
Button('建表')
.onClick(() => {
gworkerInstance.postMessage({code:1,data:context});
})
Button('插入数据')
.onClick(() => {
let student:StudentInfo = new StudentInfo()
let index = Math.ceil(Math.random()*10)%10
student.name = nameArr[index]
student.age = Math.ceil(Math.random()*100)%18
student.salary = 2000 + Math.ceil(Math.random()*10000)%10000
student.gender = index>5?true:false
gworkerInstance.postMessage({code:2,data:student});
})
Button('查询数据')
.onClick(() => {
gworkerInstance.postMessage({code:3,data:{}});
})
}
.width('100%')
.margin({top:10})
.justifyContent(FlexAlign.SpaceAround)
ForEach(this.list, (item: StudentInfo, index: number) => {
ViewA({ student: item})
})
}
.height('100%')
.width('100%')
}
}
}
@Component
export struct ViewA {
student: StudentInfo = new StudentInfo();
build() {
Row(){
Text("姓名:"+this.student.name)
Text("年龄:"+this.student.age.toString())
Text("费用:"+this.student.salary.toString())
Text("性别:"+ (this.student.gender===true?"男":"女"))
}.width('100%').margin({top : 10 }).justifyContent(FlexAlign.SpaceEvenly)
}
}
GlobalWorker.ets
import { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS';
import { StudentInfo } from '../pages/Index1';
const mworkerPort: ThreadWorkerGlobalScope = worker.workerPort;
const studentArr:StudentInfo[] = []
mworkerPort.onmessage = (e: MessageEvents) => {
console.log('onmessage====' + JSON.stringify(e))
if (e.data.code == 1) {
} else if (e.data.code == 2) {
let student = e.data.data as StudentInfo
studentArr.push(student)
mworkerPort.postMessage({code:101,data:[student]})
} else if (e.data.code == 3) {
mworkerPort.postMessage({code:101,data:studentArr})
} else {
}
console.log('testtag onmessage end')
}
mworkerPort.onmessageerror = (e: MessageEvents) => {
console.error(`workerPort.onmessageerror:${JSON.stringify(e)}`)
}
mworkerPort.onerror = (e: ErrorEvent) => {
console.error(`workerPort.onerror:${JSON.stringify(e)}`)
}
更多关于HarmonyOS 鸿蒙Next worker 如何传参数?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙)系统中,Next worker传参数可以通过以下几种方式实现:
-
Intent传递:
- 创建一个Intent实例,使用
putString
、putInt
等方法将参数放入Intent。 - 调用
startAbility
方法,并将Intent作为参数传入,以启动目标Ability。 - 在目标Ability的
onStart
方法中,通过getIntent
方法获取Intent,并使用getString
、getInt
等方法提取参数。
- 创建一个Intent实例,使用
-
全局变量:
- 定义一个全局变量或全局对象,用于存储要传递的参数。
- 在Next worker中修改全局变量的值。
- 在目标Ability或组件中读取全局变量的值。
-
数据仓库(如SQLite、NoSQL数据库等):
- 将参数存储到数据库中。
- 在Next worker中插入或更新数据库记录。
- 在目标Ability中查询数据库以获取参数。
-
消息队列或事件总线:
- 使用HarmonyOS提供的消息队列机制或第三方事件总线库。
- 在Next worker中发布包含参数的事件或消息。
- 在目标Ability中订阅事件或消息,并在事件或消息到达时处理参数。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html