安卓 2.1 GoogleMaps ItemizedOverlay ConcurrentModificationException

标签 android google-maps concurrency android-mapview itemizedoverlay

我无法弄清楚 ConcurrentModificationException 的来源。在我的 activity 中,我正在调用 updateMapOverlay()。我还在定期调用的另一个线程(TimerTask)中调用 updateMapOverlay()。从两个线程调用 updateMapOverlay() 时,我采用了适当的锁定。这个问题是因为我从非 UI 线程(即 TimerTask)调用 updateMapOverlay 引起的吗?还有其他人遇到过类似的问题吗?

private void updateMapOverlay() {

 this.itemizedOverlay.refreshItems(createOverlayItemsList());
    List overlays = mapView.getOverlays();
    overlays.clear();
    overlays.add(cotItemizedOverlay);
            this.mapview.invalidate();

}

谢谢。

异常:

W/dalvikvm(10641): threadid=3: thread exiting with uncaught exception (group=0x4001b180)
E/AndroidRuntime(10641): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime(10641): java.util.ConcurrentModificationException
E/AndroidRuntime(10641):    at java.util.AbstractList$SimpleListIterator.next(AbstractList.java:64)
E/AndroidRuntime(10641):    at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:41)
E/AndroidRuntime(10641):    at com.google.android.maps.MapView.onDraw(MapView.java:494)
E/AndroidRuntime(10641):    at android.view.View.draw(View.java:6535)
E/AndroidRuntime(10641):    at android.view.ViewGroup.drawChild(ViewGroup.java:1531)
E/AndroidRuntime(10641):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
E/AndroidRuntime(10641):    at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
E/AndroidRuntime(10641):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
E/AndroidRuntime(10641):    at android.view.View.draw(View.java:6538)
E/AndroidRuntime(10641):    at android.widget.FrameLayout.draw(FrameLayout.java:352)
E/AndroidRuntime(10641):    at android.view.ViewGroup.drawChild(ViewGroup.java:1531)
E/AndroidRuntime(10641):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
E/AndroidRuntime(10641):    at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
E/AndroidRuntime(10641):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
E/AndroidRuntime(10641):    at android.view.View.draw(View.java:6538)
E/AndroidRuntime(10641):    at android.widget.FrameLayout.draw(FrameLayout.java:352)
E/AndroidRuntime(10641):    at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1830)
E/AndroidRuntime(10641):    at android.view.ViewRoot.draw(ViewRoot.java:1349)
E/AndroidRuntime(10641):    at android.view.ViewRoot.performTraversals(ViewRoot.java:1114)
E/AndroidRuntime(10641):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
E/AndroidRuntime(10641):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(10641):    at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(10641):    at android.app.ActivityThread.main(ActivityThread.java:4363)
E/AndroidRuntime(10641):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(10641):    at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(10641):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime(10641):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime(10641):    at dalvik.system.NativeStart.main(Native Method)
I/Process (   95): Sending signal. PID: 10641 SIG: 3

最佳答案

Is this problem being caused because I'm invoking updateMapOverlay from inside a non-UI thread

是的。

I'm also calling updateMapOverlay() inside another Thread (a TimerTask) that is invoked on regular intervals.

为什么要不断地删除和添加叠加层?只需更新覆盖并使其失效。参见 here for an example异步更新叠加层。

关于安卓 2.1 GoogleMaps ItemizedOverlay ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2870743/

相关文章:

java - 我的 java 程序中的监视器陷入死锁

Java ExecutorService invokeAll() 中断

android - 将 android AsyncTask 调用转换为单独的类并从所有 Activity 调用

"WHERE"附近的 Android 数据库更新 : syntax error

android - 如何处理集群中的大量 ClusterItems - Android GoogleMaps V2

javascript - 如何使用 django 表单和 javascript 来自动完成字段

ios - 像 Uber iOS 应用程序一样在 Google map 上移动标记?

android - 使用 AndroidX 时找不到辅助 dex 文件中的 MultiDexApplication 类

android - 可以在安卓平板的安卓设备上开发安卓程序吗

C - 并发问题