1、使用官方提供的api实现Glide.error(),弊端:递归调用会出现无限调用的情况。
2、
(1)设置监听器
Glide.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target,boolean isFirstResource) {
//图片加载失败
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target,DataSource dataSource, boolean isFirstResource) {
//图片加载成功
}
}
在两个回调函数中设置是否加载成功的标志位。
(2)开启线程去轮询当前图片的加载状态,并更新UI。
public interface TimeOutListener {
void onTimeout(boolean isTimeout);
}
private TimeOutListener timeOutListener;
public void setTimeOutListener(TimeOutListener timeOutListener) {
this.timeOutListener = timeOutListener;
}
@Override
public void onTimeout(boolean isTimeout) {
// 监听超时状态
Log.d(TAG, "-----" + isTimeout);
executor.execute(() -> {
//设置超时时间为20秒
while ((endTime - startTime) < 20 * 1000) {
if (isTimeout) {
endTime = System.currentTimeMillis();
SystemClock.sleep(2000);
runOnUiThread(() -> {
if (cutDownTimeout) {
return;
}
if (loadPhoTimes == 0) {
} else {
//重新加载图片
loadSplashPho(ivSplash);
}
loadPhoTimes++;
});
} else {
return;
}
}
//通知UI改变状态
});
}
如果失败则进行超时范围内的重试。