ArrayList<WeakReference<IScanListener>> toRemove = new ArrayList<WeakReference<IScanListener>>();
synchronized (scanListeners) {
for (WeakReference<IScanListener> ref : scanListeners) {
IScanListener listener = ref.get();
if (listener != null) {
listener.notifyEndOfScanDetected();
}
}
scanListeners.retainAll(toRemove);
}
toRemove.clear();