在对视图(MapView)

时间:2015-06-26 13:16:55

标签: android mapquest

首先,我是一位拥有iOS背景的新Android开发人员,这是我的第一篇文章。

现在开展业务,我正在使用MapQuest SDK 1.0.5开发一个应用程序,其中包含一个MapView,它会定期更新新数据(如导航历史记录和到目的地的路径)。

我的问题是在一些invalidate()调用应用程序崩溃之后。 使用新数据更新地图需要使用invalidate调用。 调用是从主线程完成的。

private void updateMap()
{
    // remove old data from the map
    .....
    // add new data to the map

    // update map with new data
    mapView.invalidate();
}

过了一段时间我得到警告:

E/Looper﹕ WARNING: The Looper class instance count has over a limit(100). There should be some leakage of Looper or HandlerThread.
E/Looper﹕ Looper class instance count = 304
E/Looper﹕ Current Thread Name: simplifier

应用程序通常在我的测试设备上以~300崩溃:

E/[EGL-ERROR]﹕ void __egl_platform_dequeue_buffer(egl_surface*):1779: failed to dequeue buffer from native window 0x61c14a28; err = -2147483646, buf = 0x0,max_allowed_dequeued_buffers 3
E/[EGL-ERROR]﹕ void __egl_platform_dequeue_buffer(egl_surface*):1779: failed to dequeue buffer from native window 0x61c14a28; err = -16, buf = 0x0,max_allowed_dequeued_buffers 3
W/MALI﹕ _gles_set_error:82: [WARNING]Mali GLES errorcode: 501
E/OpenGLRenderer﹕ GL_INVALID_VALUE
E/[EGL-ERROR]﹕ void __egl_platform_dequeue_buffer(egl_surface*):1779: failed to dequeue buffer from native window 0x61c14a28; err = -16, buf = 0x0,max_allowed_dequeued_buffers 3
E/[EGL-ERROR]﹕ void __egl_platform_dequeue_buffer(egl_surface*):1779: failed to dequeue buffer from native window 0x61c14a28; err = -16, buf = 0x0,max_allowed_dequeued_buffers 3
A/Looper﹕ Could not create wake pipe. errno=24
A/libc﹕ Fatal signal 6 (SIGABRT) at 0x000001e5 (code=-6), thread 3944 (simplifier)

我真的不知道该做什么,整天都在这上班。

编辑30.06.2015

管理找到问题的根源,在更新方法中我添加和删除地图中的叠加项目,但是当我添加新的LineOverlay项目时,会创建一个后台线程并且它永远不会停止即使中断它。

mapView.getOverlays().add(overlay);

问题是只有当我添加LineOverlay项(Overlay的子类)时才创建线程,如果我添加DefaultItemizedOverlay,例如一切正常。

这是我在getOverlays()的文档中找到的:

返回重叠列表对象。使用此选项可以在MapView中添加和删除叠加层。该列表在外部同步,但如果迭代则必须在列表实例上同步。

我猜这个部分"外部同步"导致问题。

有什么建议吗?

0 个答案:

没有答案