最近我在我的项目中使用了UIL的1.9.1版本并且我的测试人员反复反馈,当应用程序第一次启动时,图像没有显示,但是当应用程序启动或之后完成时它是正常的。然后我检查日志和logcat显示“任务中断”。然后我在源代码中找到InterruptedException段。原始代码是:
/** @return true - if task should be interrupted; false - otherwise */
private boolean waitIfPaused() {
AtomicBoolean pause = engine.getPause();
synchronized (pause) {
if (pause.get()) {
log(LOG_WAITING_FOR_RESUME);
try {
pause.wait();
} catch (InterruptedException e) {
L.e(LOG_TASK_INTERRUPTED, memoryCacheKey);
return true;
}
log(LOG_RESUME_AFTER_PAUSE);
}
}
return checkTaskIsNotActual();
}
/** @return true - if task should be interrupted; false - otherwise */
private boolean delayIfNeed() {
if (options.shouldDelayBeforeLoading()) {
log(LOG_DELAY_BEFORE_LOADING, options.getDelayBeforeLoading(), memoryCacheKey);
try {
Thread.sleep(options.getDelayBeforeLoading());
} catch (InterruptedException e) {
L.e(LOG_TASK_INTERRUPTED, memoryCacheKey);
return true;
}
return checkTaskIsNotActual();
}
return false;
}
此代码段位于 com.nostra13.universalimageloader.core 的 LoadAndDisplayImageTask 中。那么在什么情况下这个例外会被抛弃,互联网链接速度不好,设备内存不足,CPU繁忙还是其他什么?
答案 0 :(得分:1)
答案 1 :(得分:0)
我认为当您调用ImageLoader.stop()
或ImageLoader.destroy()
或系统完成应用程序以便应用程序线程被中断时就会发生这种情况。同时,synchronized
中的waitIfPaused
句子会同时阻止相同的图片网址加载。所以,如果一个url同时加载,第二个将等待util第一张图片成功加载。