I have an application with a service that downloads a set of job data
from a remote web service. It uses this data to update a static
HashMap of Job objects:
public static HashMap<String, Object> jobs = new HashMap<String,
Object>();
When it's finished, it sends a message to a handler in
MapViewActivity:
MapViewActivity.handler.sendMessage( new Message() );
to tell it redraw markers on the map based on the data in the jobs
HashMap :
public class MapViewActivity extends MapActivity {
private static HashMap<String, Object> markers = new
HashMap<String, Object>();
public static Handler handler = new Handler() {
public void handleMessage( Message m ) {
super.handleMessage( m );
syncMarkers();
}
};
syncMarkers() reads the jobs HashMap and updates the markers HashMap
based on what it finds. The markers HashMap contains a mapping of
string identifiers to MapOverlay (which extends ItemizedOverlay)
objects.
I'm getting a java.util.ConcurrentModificationException and a force
close from within syncMarkers() as it tries to iterate over the
markers HashMap. I can see from the backtrace that syncMarkers() is
being invoked from the handler.
I presume this is because the user interface is trying to access the
marker objects at the same time as syncMarkers(). However, I'm very
surprised that this is the case, because I thought the handler would
run in the same thread as the user interface (and not the service's
thread), and so would never conflict. Am I wrong?
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en