Universal-Image-Loader中的任务中断

时间:2014-04-14 01:42:02

标签: android universal-image-loader interrupted-exception

最近我在我的项目中使用了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繁忙还是其他什么?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

我认为当您调用ImageLoader.stop()ImageLoader.destroy()或系统完成应用程序以便应用程序线程被中断时就会发生这种情况。同时,synchronized中的waitIfPaused句子会同时阻止相同的图片网址加载。所以,如果一个url同时加载,第二个将等待util第一张图片成功加载。