Skip to content

Commit af4873e

Browse files
committed
Use ExecutorService to fire callbacks for tasks out of Main thread
1 parent 219d367 commit af4873e

File tree

3 files changed

+12
-8
lines changed

3 files changed

+12
-8
lines changed

library/src/com/nostra13/universalimageloader/core/ImageLoaderEngine.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class ImageLoaderEngine {
4343

4444
private Executor taskExecutor;
4545
private Executor taskExecutorForCachedImages;
46-
private ExecutorService taskDistributor;
46+
private Executor taskDistributor;
4747

4848
private final Map<Integer, String> cacheKeysForImageAwares = Collections
4949
.synchronizedMap(new HashMap<Integer, String>());
@@ -179,6 +179,10 @@ void stop() {
179179
uriLocks.clear();
180180
}
181181

182+
void fireCallback(Runnable r) {
183+
taskDistributor.execute(r);
184+
}
185+
182186
ReentrantLock getLockForUri(String uri) {
183187
ReentrantLock lock = uriLocks.get(uri);
184188
if (lock == null) {

library/src/com/nostra13/universalimageloader/core/LoadAndDisplayImageTask.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ public void run() {
179179

180180
DisplayBitmapTask displayBitmapTask = new DisplayBitmapTask(bmp, imageLoadingInfo, engine, loadedFrom);
181181
displayBitmapTask.setLoggingEnabled(writeLogs);
182-
runTask(displayBitmapTask, options.isSyncLoading(), handler);
182+
runTask(displayBitmapTask, options.isSyncLoading(), handler, engine);
183183
}
184184

185185
/** @return <b>true</b> - if task should be interrupted; <b>false</b> - otherwise */
@@ -371,7 +371,7 @@ public void run() {
371371
progressListener.onProgressUpdate(uri, imageAware.getWrappedView(), current, total);
372372
}
373373
};
374-
runTask(r, false, handler);
374+
runTask(r, false, handler, engine);
375375
return true;
376376
}
377377

@@ -386,7 +386,7 @@ public void run() {
386386
listener.onLoadingFailed(uri, imageAware.getWrappedView(), new FailReason(failType, failCause));
387387
}
388388
};
389-
runTask(r, false, handler);
389+
runTask(r, false, handler, engine);
390390
}
391391

392392
private void fireCancelEvent() {
@@ -397,7 +397,7 @@ public void run() {
397397
listener.onLoadingCancelled(uri, imageAware.getWrappedView());
398398
}
399399
};
400-
runTask(r, false, handler);
400+
runTask(r, false, handler, engine);
401401
}
402402

403403
private ImageDownloader getDownloader() {
@@ -494,11 +494,11 @@ private void log(String message, Object... args) {
494494
if (writeLogs) L.d(message, args);
495495
}
496496

497-
static void runTask(Runnable r, boolean sync, Handler handler) {
497+
static void runTask(Runnable r, boolean sync, Handler handler, ImageLoaderEngine engine) {
498498
if (sync) {
499499
r.run();
500500
} else if (handler == null) {
501-
new Thread(r).start();
501+
engine.fireCallback(r);
502502
} else {
503503
handler.post(r);
504504
}

library/src/com/nostra13/universalimageloader/core/ProcessAndDisplayImageTask.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,6 @@ public void run() {
5555
DisplayBitmapTask displayBitmapTask = new DisplayBitmapTask(processedBitmap, imageLoadingInfo, engine,
5656
LoadedFrom.MEMORY_CACHE);
5757
displayBitmapTask.setLoggingEnabled(engine.configuration.writeLogs);
58-
LoadAndDisplayImageTask.runTask(displayBitmapTask, imageLoadingInfo.options.isSyncLoading(), handler);
58+
LoadAndDisplayImageTask.runTask(displayBitmapTask, imageLoadingInfo.options.isSyncLoading(), handler, engine);
5959
}
6060
}

0 commit comments

Comments
 (0)