HarmonyOS 鸿蒙Next 更新到DP2后,在多线程中测量文本宽度出现问题
HarmonyOS 鸿蒙Next 更新到DP2后,在多线程中测量文本宽度出现问题 昨天手机更新到DP2后发现页面经常crash,排查后发现在子线程执行
import measure from '@ohos.measure'
import taskpool from '@ohos.taskpool'
@Concurrent
function multiMeasure(){
let data:number[] = []
for (let i = 0; i < 2000; i++) {
let charWidth = measure.measureText({
textContent: '我',
fontSize: 80 + 'px'
}) * 3
data.push(charWidth)
}
return data;
}
async function asyncMultiMeasure(){
let task:taskpool.Task = new taskpool.Task(multiMeasure)
let data:number[] = [];
data = await taskpool.execute(task) as number[]
return data;
}
@Component
export struct measureTest{
@State data:number[] = [0]
async aboutToAppear(){
this.data = await asyncMultiMeasure();
console.log(`MEA-MSG: len:${this.data.length}`)
this.data.forEach(d => {
console.log(`MEA-MSG: num:${d}`)
})
}
build() {
Column(){
Text(this.data[0].toString())
.fontSize(20)
}
}
}
这是更新后的bug吗?
下面是一个实例代码
import measure from '@ohos.measure'
import taskpool from '@ohos.taskpool'
@Concurrent
function multiMeasure(){
let data:number[] = []
for (let i = 0; i < 2000; i++) {
let charWidth = measure.measureText({
textContent: '我',
fontSize: 80 + 'px'
}) * 3
data.push(charWidth)
}
return data;
}
async function asyncMultiMeasure(){
let task:taskpool.Task = new taskpool.Task(multiMeasure)
let data:number[] = [];
data = await taskpool.execute(task) as number[]
return data;
}
@Component
export struct measureTest{
@State data:number[] = [0]
async aboutToAppear(){
this.data = await asyncMultiMeasure();
console.log(`MEA-MSG: len:${this.data.length}`)
this.data.forEach(d => {
console.log(`MEA-MSG: num:${d}`)
})
}
build() {
Column(){
Text(this.data[0].toString())
.fontSize(20)
}
}
}
Reason: Signal: SIGSEGV(SEGV_MAPERR)@0x0000000000000028 probably caused by NULL pointer dereference
更多关于HarmonyOS 鸿蒙Next 更新到DP2后,在多线程中测量文本宽度出现问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
5 回复
你好,这个问题建议附上代码通过在线提单进一步解决:https://developer.huawei.com/consumer/cn/support/feedback/#/,感谢您的反馈和支持
更多关于HarmonyOS 鸿蒙Next 更新到DP2后,在多线程中测量文本宽度出现问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
同遇到,咋解决的呢?
没解决捏,
在HarmonyOS鸿蒙Next DP2版本中,多线程环境下测量文本宽度可能出现问题,可能是由于线程同步或资源竞争导致的。建议检查以下几点:
- 确保在UI线程中进行文本测量操作;
- 使用
TextMeasurer
类时,确保线程安全; - 避免在多线程中同时访问共享资源。
如果问题持续,建议提交日志和代码片段给华为开发者支持团队进行进一步分析。