Glide
一个重要的特点就是通过一个透明的Fragment
来感知外层Activity
或Fragment
的生命周期,在onStart
方法里面启动网络请求,onStop
里面暂停请求,onDestroy
里面解除监听并释放内存。那么,
Glide
是怎么做到这个监听事件的?
用于监听的接口
Glide
里面用于监听生命周期的接口总有两个,它们分别是 LifecycleListener
和 Lifecycle
:
/**
* 一个用来监听Fragment或Activity生命周期的回调接口
*/
public interface LifecycleListener {
/**
* Fragment或Activity生命周期为onStart时的回调
*/
void onStart();
/**
* Fragment或Activity生命周期为onStop时的回调
*/
void onStop();
/**
* Fragment或Activity生命周期为onDestroy时的回调
*/
void onDestroy();
}
LifecycleListener
是用于回调的接口,那么 Lifecycle
呢:
/**
* 用于监听Activity / Fragment生命周期事件的接口。
*/
public interface Lifecycle {
/**
* 添加生命周期方法的回调监听
*/
void addListener(@NonNull LifecycleListener listener);
/**
* 移除生命周期方法的回调监听
*/
void removeListener(@NonNull LifecycleListener listener);
}
Lifecycle
就是用来注册 LifecycleListener
的。他们的具体关联关系,可以看一下 ActivityFragmentLifecycle
,这个类是 Lifecycle
实现类:
public class ActivityFragmentLifecycle implements Lifecycle {
/**
* 弱引用WeakHashMap持有LifecycleListener(key)再转为Set
* Set底层就是用Map来实现的,只保留key
*/
private final Set<LifecycleListener> lifecycleListeners =
Collections.newSetFromMap(new WeakHashMap<LifecycleListener, Boolean>