GIF镇楼
框架引入
在项目根目录的build.gradle文件中添加
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
app目录下的build.gradle文件中添加
dependencies {
implementation 'com.github.Martin0207.LazyBread:core:v1.0.2'
annotationProcessor 'com.github.Martin0207.LazyBread:processor:v1.0.2'
}
框架使用
public class TwoFragment extends Fragment {
private static final String TAG
= TwoFragment
.class.getSimpleName();
private TextView mTv
;
@Override
public void setUserVisibleHint(boolean isVisibleToUser
) {
super.setUserVisibleHint(isVisibleToUser
);
LazyBread
.onUserVisibleHint(this, isVisibleToUser
);
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState
) {
super.onCreate(savedInstanceState
);
LazyBread
.bind(this);
}
@Nullable
@Override
public View
onCreateView(@NonNull LayoutInflater inflater
, @Nullable ViewGroup container
, @Nullable Bundle savedInstanceState
) {
View inflate
= inflater
.inflate(R
.layout
.normal_fragment
, container
, false);
mTv
= inflate
.findViewById(R
.id
.tv
);
return inflate
;
}
@LazyInit()
public void lazy() {
mTv
.setText(TAG
);
}
}
逻辑图
框架优势
1.使用简单
如上图展示,仅需要简单的三步就可以实现Fragment的懒加载功能,并且不破坏原有代码。
2.支持懒加载方法排序
@Target(ElementType
.METHOD
)
@Retention(RetentionPolicy
.RUNTIME
)
public @
interface LazyInit {
boolean isCycle() default false;
int priority() default 1;
}
如源码中展示,可以根据priority排列调用顺序。
3.支持方法重复调用
代码如上,我们可以设置被LazyInit注解的方法是否在每次触发时调用
4.支持Fragment多层嵌套
5.支持框架自动解绑
框架绑定有@LazyInit注解方法的Fragment时,会主动监听Fragment的生命周期,并且在onFragmentDestroyed时解除Fragment的绑定。当然也你也可以手动解除绑定。
结语
框架功能主要由Annotation和AnnotationProcessor来实现,实现方式与思路并不复杂,这里就不做源码分析了。如果有兴趣,可以来看下源码