HarmonyOS鸿蒙Next之线程01——ParallelTaskDispatcher派发任务
HarmonyOS鸿蒙Next之线程01——ParallelTaskDispatcher派发任务 创建一个名为“ParallelTaskDispatcher”的设备类型任务,用于演示ParallelTaskDispatcher任务分发器派发任务的使用。
修改ability_main.xml
修改ability_main.xml
内容如下:
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:orientation="vertical">
<Text
ohos:id="$+id:text_start_parallel_task_dispatcher"
ohos:height="match_parent"
ohos:width="match_content"
ohos:background_element="$graphic:background_ability_main"
ohos:layout_alignment="horizontal_center"
ohos:text="Start ParallelTaskDispatcher"
ohos:text_size="50"/>
</DirectionalLayout>
显示界面效果如下图1所示
自定义任务
MyTask
是自定义的一个任务。该任务逻辑比较简单,只是模拟了一个耗时的操作。
package com.waylau.hmos.paralleltaskdispatcher;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import java.util.concurrent.TimeUnit;
public class MyTask implements Runnable {
private static final String TAG = MyTask.class.getSimpleName();
private static final HiLogLabel LABEL_LOG =
new HiLogLabel(HiLog.LOG_APP, 0x00001, TAG);
private String taskName;
public MyTask(String taskName) {
this.taskName = taskName;
}
@Override
public void run() {
HiLog.info(LABEL_LOG, "before %s run", taskName);
int task1Result = getRandomInt();
try {
// 模拟一个耗时的操作
TimeUnit.MILLISECONDS.sleep(task1Result);
} catch (InterruptedException e) {
e.printStackTrace();
}
HiLog.info(LABEL_LOG, "after %s run, result is: %s", taskName, task1Result);
}
// 返回随机整数
private int getRandomInt() {
// 获取[0, 1000)之间的int整数。方法如下:
double a = Math.random();
int result = (int) (a * 1000);
return result;
}
}
这个耗时操作,是通过获取一个随机数,而后根据随机数执行线程sleep实现的。
执行任务派发
修改MainAbilitySlice
,增加任务派发器相关的逻辑。
package com.waylau.hmos.paralleltaskdispatcher.slice;
import com.waylau.hmos.paralleltaskdispatcher.MyTask;
import com.waylau.hmos.paralleltaskdispatcher.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Text;
import ohos.app.dispatcher.Group;
import ohos.app.dispatcher.TaskDispatcher;
import ohos.app.dispatcher.task.TaskPriority;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import java.util.Random;
import java.util.concurrent.TimeUnit;
public class MainAbilitySlice extends AbilitySlice {
private static final String TAG = MainAbilitySlice.class.getSimpleName();
private static final HiLogLabel LABEL_LOG =
new HiLogLabel(HiLog.LOG_APP, 0x00001, TAG);
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
Text textStartDispatcher =
(Text) findComponentById(ResourceTable.Id_text_start_parallel_task_dispatcher);
textStartDispatcher.setClickedListener(listener -> startDispatcher());
}
// 指定任务排发
private void startDispatcher() {
String dispatcherName = "MyDispatcher";
TaskDispatcher dispatcher = this.getContext().createParallelTaskDispatcher(dispatcherName, TaskPriority.DEFAULT);
Group group = dispatcher.createDispatchGroup();
dispatcher.asyncGroupDispatch(group, new MyTask("task1"));
dispatcher.asyncGroupDispatch(group, new MyTask("task2"));
dispatcher.groupDispatchNotify(group, new MyTask("task3"));
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
上述代码,
Text
增加了点击事件,以触发startDispatcher
任务startDispatcher
方法中创建了ParallelTaskDispatcher
任务派发器- 创建了三个
MyTask
任务实例,这些任务都是一个任务组。 task1
和task2
通过asyncGroupDispatch
方式异步派发。task3
通过groupDispatchNotify
方式派发。groupDispatchNotify
方式是需要等任务组中的所有任务执行完成后才会执行指定任务。
还得多看啊,楼主厉害
更多关于HarmonyOS鸿蒙Next之线程01——ParallelTaskDispatcher派发任务的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
感谢支持,请期待后续的更新
又学会一点,真是哈哈哈
眼睛看了,但脑袋不会,嘻嘻
一直觉得这内容有内涵
膜拜呀,请接受我的膝盖
你们太厉害啦,我可不行
在HarmonyOS中,ParallelTaskDispatcher
是用于并行任务派发的类。它允许开发者将任务分配到多个线程中并行执行,以提高应用程序的性能和响应速度。ParallelTaskDispatcher
通过TaskDispatcher
接口提供任务派发功能,支持任务的同步和异步执行。
使用ParallelTaskDispatcher
时,开发者可以通过GlobalTaskDispatcher
获取其实例,然后调用asyncDispatch
或syncDispatch
方法来派发任务。asyncDispatch
用于异步执行任务,不会阻塞当前线程;syncDispatch
用于同步执行任务,会阻塞当前线程直到任务完成。
ParallelTaskDispatcher
适用于需要并行处理多个独立任务的场景,例如图像处理、数据计算等。通过合理使用ParallelTaskDispatcher
,可以充分利用多核CPU的计算能力,提升应用程序的执行效率。
在HarmonyOS鸿蒙Next中,ParallelTaskDispatcher
用于并行派发任务。它通过GlobalTaskDispatcher
获取实例,支持多线程并发执行任务。使用asyncDispatch
方法异步派发任务,任务会在后台线程中执行,不会阻塞主线程。syncDispatch
方法则同步派发任务,任务会在当前线程中执行,直到任务完成。ParallelTaskDispatcher
适用于需要并发处理的场景,如多任务下载、并行计算等,能有效提升系统性能。