HarmonyOS鸿蒙Next中如何实现异步添加大量地图marker

项目用的是高德地图,但是华为地图也存在同样的问题,就是我地图需要添加大约有3000个marker,需要在一进入到地图页面就进行加载,现在遇到的问题是

  1. 在进入页面时按常规方式加载地图,在地图ready好之后开始加载marker,此时地图准备好了,我可以添加marker,数量少的时候没问题,数量多的时候,比如3000多个,就卡主线程了,有时还会出现主线程卡崩了闪退。
  2. 我看了鸿蒙的多线程方案,由于多线程是独立内存的,有很多的限制无法实现,获取生成marker需要的数据非常快,卡顿点在于addmarker这个操作,如果用鸿蒙的方案由于内存不共享,markeroption是由地图方提供,不支持序列化,无法传入到子线程,地图控制器也是一样,从而无法通过鸿蒙的多线程模式进行多线程渲染,不知道有没有更好的方案,还是我对鸿蒙的多线程理解有误。
  3. 尝试使用 setTimeout(() => {} 方法让addmarker不在主线程执行,但没有效果。
  4. 现在需求需要加载这么多marker,可能还会更多,但是目前地图sdk都还没看到支持海量点的处理方法

请教各位大佬,HarmonyOS鸿蒙Next中如何实现异步添加大量地图marker呢?


更多关于HarmonyOS鸿蒙Next中如何实现异步添加大量地图marker的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

在web是用canvas来画大量marker的,不然都会卡,另外一种方案是在服务端渲染返回给前端

更多关于HarmonyOS鸿蒙Next中如何实现异步添加大量地图marker的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


可是同样的条件下,用的是原生安卓就好很多,至少目前3000这个数量还不至于卡顿,安卓可以直接新建线程操作,不会影响到主线程,可能鸿蒙地图sdk还有待优化,但不应该差距这么多。

在HarmonyOS鸿蒙Next中,异步添加大量地图marker可以通过以下步骤实现:

  1. 使用多线程:通过TaskDispatcher创建后台线程,避免阻塞主线程。
  2. 分批加载:将大量marker数据分批处理,每批数据加载完成后更新UI。
  3. 地图API:使用Map组件的addMarker方法异步添加marker。
  4. 性能优化:避免频繁操作UI,使用HandlerEventBus进行线程间通信。

示例代码:

TaskDispatcher dispatcher = getGlobalTaskDispatcher(TaskPriority.DEFAULT);
dispatcher.asyncDispatch(() -> {
    for (MarkerData marker : markers) {
        getUITaskDispatcher().asyncDispatch(() -> {
            map.addMarker(new MarkerOptions().position(marker.getPosition()));
        });
    }
});

通过以上方法,可以高效地异步添加大量地图marker,确保应用流畅运行。

回到顶部