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;@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) {super.setUserVisibleHint(isVisibleToUser);/*手动监听Fragment的显隐*/LazyBread.onUserVisibleHint(this, isVisibleToUser);}@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);/*绑定Fragment需要在onActivityCreated或之前调用*/LazyBread.bind(this);}@Nullable@Overridepublic 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 {/*** 是否在每次Fragment对用户可见时都调用* 默认情况下,Fragment只需要调用一次初始化方法* @return 默认不重复*/boolean isCycle() default false;/*** 优先值* 同一个Fragment中,若拥有多个方法被注解,* 则按照优先值由大到小的顺序调用* @return 默认为1*/int priority() default 1;}

如源码中展示,可以根据priority排列调用顺序。

3.支持方法重复调用

代码如上,我们可以设置被LazyInit注解的方法是否在每次触发时调用

4.支持Fragment多层嵌套

5.支持框架自动解绑

框架绑定有@LazyInit注解方法的Fragment时,会主动监听Fragment的生命周期,并且在onFragmentDestroyed时解除Fragment的绑定。当然也你也可以手动解除绑定。

结语

框架功能主要由Annotation和AnnotationProcessor来实现,实现方式与思路并不复杂,这里就不做源码分析了。如果有兴趣,可以来看下源码

Fragment懒加载——最简方案(LazyBread)相关推荐

  1. viewpager+fragment 懒加载

    大家都知道viewpager默认会加载下一页数据,viewpager提供了一个方法setOffscreenPageLimit(),设置预加载页数 懒加载字面意思当需要的时候才去加载,不需要时不加载 之 ...

  2. 【Android】再来一篇Fragment懒加载(只加载一次哦)

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 使用前需知 2017-7-14更新: 目前有人使用后出现了诸如首次打开显示空白界面,但点击有反应:或来回切换又变空白界面的问题.这些 ...

  3. Fragment懒加载(三)

    老实说,我没想到我会写关于Fragment懒加载的第三章内容,我之前是打算写两章就完结了,以我的知识储备,我就只认为懒加载只是为了配合viewpager防止预加载而已,然后我错了,我没想到Fragme ...

  4. 带你深入了解Fragment懒加载

    Fragment懒加载是一种优化技术,用于在Android应用中延迟加载和初始化Fragment的内容,以提高应用性能和用户体验.它的核心思想是只有在Fragment可见时才加载数据和执行相关操作,而 ...

  5. Android——Fragment懒加载

    Fragment懒加载 简述 LazyFragment 简述 大部分APP框架由一个单例MainActivity和多个Fragment组成:在实际开发中常使用BottomNavigationView+ ...

  6. Fragment 懒加载

    为何懒加载 在很多 App 都会有ViewPage + Fragment 的基本组合,但是众所周知 viewPager 的 预加载机制,即使设置函数 setOffscreenPageLimit(0) ...

  7. Androidx ViewPager+Fragment 懒加载

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/113545036 本文出自[赵彦军的博客] 目录 前言 懒加载(预加载) 传统模式 ...

  8. ViewPager+Fragment懒加载

    原文链接:http://blog.csdn.net/linglongxin24/article/details/53205878 Android中ViewPager+Fragment取消(禁止)预加载 ...

  9. Android Fragment懒加载

    懒加载思路 在Fragment布局创建的时候调用懒加载方法,创建之后将isViewPrepared设置为true. /**标记Fragment视图是否已经初始化完毕*/private boolean ...

最新文章

  1. ACCP学习旅程之----- 使用HTML语言开发商业站点(第一章 HTML的基本标签)
  2. http请求响应的组成部分的介绍 用cherome查看请求响应内容 curl命令行的使用
  3. python和c-C和Python我该先学什么?
  4. 关于linux挂载windows共享文件夹的试验
  5. 完善ext.grid.panel中的查询功能(紧接上一篇)
  6. 【微信小程序】java最简单观察者模式
  7. 字典按照值或键进行排序
  8. AI大一统:阿里达摩院发布多任务、多模态统一模型OFA
  9. ubuntu 压缩率最高的软件_[图]Linux六大压缩算法横评:Ubuntu 19.10最终选择LZ4
  10. 实习成长之路:MySQL四:深入浅出索引
  11. HTML静态网页我的家乡,html网站家乡 !
  12. 第9周项目6委派任务
  13. Linux下通过命令行登录北交校园网
  14. 部署N9e-v3运维监控平台
  15. Ant Design Pro模板无多标签页解决方案
  16. 原生js快速查找指定元素
  17. 关于linux移植碰到Resetting CPU ...的问题
  18. 国内渗透测试新神器--北极熊扫描器4.0
  19. linux嵌入式vi使用,嵌入式Linux编辑器vi最基本的使用.doc
  20. 关于模拟电子技术、考试的讲解:序章

热门文章

  1. 现场 | AAAI执委杨强:未来几年人工智能领域将有哪些技术热点?
  2. vue 如何使用定时器?
  3. 如何提高GPS精度?
  4. 计算机软件硬件试讲,2019上半年山东教师资格证高中信息技术面试试讲真题:计算机的软件系统...
  5. Hdu 5338 ZZX and Permutations(线段树+贪心)
  6. n的阶乘c语言程序迭代,C语言实现N阶乘的程序代码
  7. 送给29班同学们的话
  8. 2440+NAND Flash(K9F1208UOM)总结 收藏
  9. 一个android应用,搜你妹视频,你懂的
  10. UE-c++ className.generated.h报错:generated header must be included last in a list of includes