本章主要分析的是RequestLoggingListener类实现过程中用到的知识点,以下代码和图文是相关继承结构。
<pre>
1、public class RequestLoggingListener implements RequestListener
2、public interface RequestListener extends ProducerListener
3、public interface ProducerListener
</pre>
RequestLoggingListener类相关知识点分析
<pre>
@GuardedBy("this")
private final Map<Pair<String, String>, Long> mProducerStartTimeMap;
@GuardedBy("this")
private final Map<String, Long> mRequestStartTimeMap;
//......省略部分.......
@Override
public synchronized void onRequestStart(
ImageRequest request,
Object callerContextObject,
String requestId,
boolean isPrefetch) {
//使用@GuardedBy("this")修饰的变量
mRequestStartTimeMap.put(requestId, getTime());
}
}
</pre>
知识点@GuardedBy("this")
@GuardedBy("this")标记的对象受当前对象保护,在方法中使用被GuardedBy标记的变量的时候,当前方法要用synchronized修饰,这个synchronized删掉后编译器也不会报错,GuardedBy主要是给后期开发维护人员看的,让人知道这是一个并发访问的变量,不要随便修改,比如删除synchronized。
知识点Pair
Pair是android中内部提供的一个泛型对象,可以创建一个两个属性相同或者不同的对象到Pair中。
<pre>
@Override
public synchronized void onRequestCancellation(String requestId) {
if (FLog.isLoggable(FLog.VERBOSE)) {
Long startTime = mRequestStartTimeMap.remove(requestId);
long currentTime = getTime();
...省略代码...
}
}
//获取间隔事件
private static long getElapsedTime(@Nullable Long startTime, long endTime) {
if (startTime != null) {
return endTime - startTime;
}
return -1;
}
//获取当前时间
private static long getTime() {
return SystemClock.uptimeMillis();
}
</pre>
知识点System.currentTimeMillis()
System.currentTimeMillis()也可以获取当前时间,但是这个时间可以修改;SystemClock.uptimeMillis()表示系统开机到当前的时间总数,单位是毫秒,但是,当系统进入深度睡眠(CPU休眠、屏幕休眠、设备等待外部输入)时间就会停止,但是不会受到时钟缩放、空闲或者其他节能机制的影响。