模仿Glide监听Activity的生命周期
2019-08-25 本文已影响0人
好学人
实现原理
由文档得知,Glide可以根据Activity的生命周期自动停止或重新加载图片,但使用Glide时并不需要我们手动监听Activity的生命周期,那Glide是怎样实现的呢?
通过梳理源码,Glide实现非侵入式监听Activity生命周期的流程如下:
- 调用者传入
Activity
对象- [重点] 在
Activity
中添加一个NoneUiFragment
- 通过
NoneUiFragment
监听Activity
的生命周期
代码实现
第1步:创建LifecycleFragment
/**
* 创建一个LifecycleFragment,用于绑定Activity的生命周期
* 并通过LifecycleListener接口将监听结果返回给调用者
*/
public class LifecycleFragment extends Fragment {
private LifecycleListener lifecycleListener;
public void setLifecycleListener(LifecycleListener lifecycleListener) {
this.lifecycleListener = lifecycleListener;
}
@Override
public void onStart() {
super.onStart();
lifecycleListener.onStart();
}
@Override
public void onStop() {
super.onStop();
lifecycleListener.onStop();
}
@Override
public void onDestroy() {
super.onDestroy();
lifecycleListener.onDestroy();
}
/**
* 监听LifecycleFragment生命周期的接口
*/
public interface LifecycleListener {
void onStart();
void onStop();
void onDestroy();
}
}
注入LifecycleFragment到Activity
public class MyGlide implements LifecycleFragment.LifecycleListener {
/**
* 添加LifecycleFragment到目标Activity中,
* 用于绑定目标Activity的生命周期
*/
public void with(FragmentActivity activity) {
//
LifecycleFragment fragment = new LifecycleFragment();
fragment.setLifecycleListener(MyGlide.this); // 添加生命周期接口回调
activity.getSupportFragmentManager()
.beginTransaction()
.add(fragment, LifecycleFragment.class.getName())
.commitAllowingStateLoss();
}
@Override
public void onStart() {
Log.i("Haoxueren", "onStart: ");
}
@Override
public void onStop() {
Log.i("Haoxueren", "onStop: ");
}
@Override
public void onDestroy() {
Log.i("Haoxueren", "onDestroy: ");
}
}