Fresco知识点笔记02-RequestLoggingList

2016-07-13  本文已影响255人  Android技术研究

本章主要分析的是RequestLoggingListener类实现过程中用到的知识点,以下代码和图文是相关继承结构。
<pre>
1、public class RequestLoggingListener implements RequestListener
2、public interface RequestListener extends ProducerListener
3、public interface ProducerListener
</pre>

接口继承接口.png

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休眠、屏幕休眠、设备等待外部输入)时间就会停止,但是不会受到时钟缩放、空闲或者其他节能机制的影响。

上一篇下一篇

猜你喜欢

热点阅读