private boolean addRequested() {
            final long time = System.currentTimeMillis();
            MapObjectOptions options;
            while ((options = requestedToAdd.poll()) != null) {
                // avoid redrawing exactly the same accuracy circle, as sometimes consecutive identical circles remain on the map
                if (!(options.options instanceof CircleOptions) || ((CircleOptions) options.options).getZIndex() != GooglePositionAndHistory.ZINDEX_POSITION_ACCURACY_CIRCLE || !drawObjects.containsKey(options)) {
                    final Object drawn = options.addToGoogleMap(googleMap);
                    drawObjects.put(options, drawn);
                }
                if (System.currentTimeMillis() - time >= TIME_MAX) {
                    // removing and adding markers are time costly operations and we dont want to block UI thread
                    runOnUIThread(this);
                    return false;
                }
            }
            return true;
        }
magic number of milliseconds. maximum allowed time of adding or removing items to googlemap
main/src/main/java/cgeo/geocaching/maps/google/v2/GoogleMapObjectsQueue.java