那么客户端如何根据不同的手机分辨率去加载不同的url呢?
Google是这样做的,下面是核心代码:
//定义正则表达式
private static final Pattern PATTERN =
Pattern.compile("__w-((?:-?d+)+)__");
@Override
protected String getUrl(String model, int width, int height) {
Matcher m = PATTERN.matcher(model);
int bestBucket = 0;
if (m.find()) {
String[] found = m.group(1).split("-");//拿到可以加载的尺寸数组
for (String bucketStr : found) {
bestBucket = Integer.parseInt(bucketStr);
if (bestBucket >= width) {//刚好大于要加载的尺寸,直接跳出循环
// the best bucket is the first immediately
// bigger than the requested width
break;
}
}
if (bestBucket > 0) {//返回合适尺寸的url
model = m.replaceFirst("w"+bestBucket);
}
}
return model;
}
大概的步骤如下:
1.根据服务端可加载的图片url定义正则表达式
2.根据正则匹配,获取到可以加载的图片尺寸数组
3.根据要加载的Imageview的大小,选择合适的尺寸的url
4.拼接url并返回
上面的例子中有200,400,600,800,1000是可以加载的,如果你要加载的Imageview的大小为600px,当遍历数组到600时,就会直接跳出循环,返回600px大小图片的url,Glide就会加载600px的图片。
异常调试
在Glide加载图片过程中出现异常时,默认是没有log输出的。但是Glide给开发者提供了两种方法来查看或者响应这些异常。
1.调试
为了在异常发生时可以看到它们,你可以打开Glide中处理所有媒体加载响应的类GenericRequest的log开关。很简单,在命令行运行下面的指令即可:
adb shell setprop log.tag.GenericRequest DEBUG
如果你将DEBUG替换为VERBOSE,还可以看到详细的请求时间日志。










