HarmonyOS 鸿蒙Next 求助!关于taskpool问题
HarmonyOS 鸿蒙Next 求助!关于taskpool问题
可以麻烦有真机的大佬帮我测试下列demo吗(beta3 版本)。
这个demo使用taskpool绘制图形,点击按钮结束上一次绘制任务,开始新任务。我连续点击两次,在第一次绘制结束前关闭这个任务重新绘制,程序直接崩溃了。
向客服提了这个问题,他那边却不会崩溃,所以想看看大佬们会不会出现这个问题。
崩溃原因:Reason:Signal:SIGSEGV(SEGV_MAPERR)@000000000000000000 probably caused by NULL pointer dereference
import { taskpool } from ‘@kit.ArkTS’;
@Entry
@Component
struct Index {
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
task = new taskpool.Task(Refresh);
build() {
Column(){
Button(‘点击’)
.onClick(() => {
this.context.clearRect(0, 0, this.context.width, this.context.height);
console.log(this.task.isDone() + ‘’)
if (!this.task.isDone()) {
try {
taskpool.cancel(this.task);
} catch (e) {
console.error(taskpool cancle error code: ${e.code}, info: ${e.message}
);
}
}
const offCanvas = new OffscreenCanvas(500, 500);
this.task.arguments = [offCanvas];
taskpool.execute(this.task).then((img) => {
this.context.drawImage(img as PixelMap,0,0);
})
})
Canvas(this.context)
}
}
}
@Concurrent
export async function Refresh(offCanvas:OffscreenCanvas) {
console.log(‘开始’)
const offContext = offCanvas.getContext(‘2d’);
for (let i = 0; i < 100000; i++) {
if (taskpool.Task.isCanceled()) {
console.log(‘已取消’)
return;
}
offContext.strokeRect(i, 0, 100, 100)
offContext.strokeRect(0, i, 100, 100)
}
const image = offCanvas.transferToImageBitmap();
console.log(‘结束’)
return image;
}
关于HarmonyOS 鸿蒙Next 求助!关于taskpool问题的问题,您也可以访问:https://www.itying.com/category-93-b0.html 联系官网客服。
7 回复
建议参考这个:https://developer.huawei.com/consumer/cn/doc/best-practices-V5/bpta-cppcrash-guidance-V5
还有这个:
程序有概率在往队列中加任务的同时这个任务释放了,导致空指针了;
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
感谢大佬,我明白了
mate60pro 会崩溃,
日志 true-开始-false-已取消-开始
按钮点慢点不会崩溃 true-开始-结束 true-开始-结束
日志 true-开始-false-已取消-开始
按钮点慢点不会崩溃 true-开始-结束 true-开始-结束
我也是这样的,客服说他那边不会崩溃,人麻了
希望HarmonyOS能继续推出更多实用的功能,满足用户的不同需求。