Fragment懒加载——最简方案(LazyBread)
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)相关推荐
- viewpager+fragment 懒加载
大家都知道viewpager默认会加载下一页数据,viewpager提供了一个方法setOffscreenPageLimit(),设置预加载页数 懒加载字面意思当需要的时候才去加载,不需要时不加载 之 ...
- 【Android】再来一篇Fragment懒加载(只加载一次哦)
本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 使用前需知 2017-7-14更新: 目前有人使用后出现了诸如首次打开显示空白界面,但点击有反应:或来回切换又变空白界面的问题.这些 ...
- Fragment懒加载(三)
老实说,我没想到我会写关于Fragment懒加载的第三章内容,我之前是打算写两章就完结了,以我的知识储备,我就只认为懒加载只是为了配合viewpager防止预加载而已,然后我错了,我没想到Fragme ...
- 带你深入了解Fragment懒加载
Fragment懒加载是一种优化技术,用于在Android应用中延迟加载和初始化Fragment的内容,以提高应用性能和用户体验.它的核心思想是只有在Fragment可见时才加载数据和执行相关操作,而 ...
- Android——Fragment懒加载
Fragment懒加载 简述 LazyFragment 简述 大部分APP框架由一个单例MainActivity和多个Fragment组成:在实际开发中常使用BottomNavigationView+ ...
- Fragment 懒加载
为何懒加载 在很多 App 都会有ViewPage + Fragment 的基本组合,但是众所周知 viewPager 的 预加载机制,即使设置函数 setOffscreenPageLimit(0) ...
- Androidx ViewPager+Fragment 懒加载
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/113545036 本文出自[赵彦军的博客] 目录 前言 懒加载(预加载) 传统模式 ...
- ViewPager+Fragment懒加载
原文链接:http://blog.csdn.net/linglongxin24/article/details/53205878 Android中ViewPager+Fragment取消(禁止)预加载 ...
- Android Fragment懒加载
懒加载思路 在Fragment布局创建的时候调用懒加载方法,创建之后将isViewPrepared设置为true. /**标记Fragment视图是否已经初始化完毕*/private boolean ...
最新文章
- ACCP学习旅程之----- 使用HTML语言开发商业站点(第一章 HTML的基本标签)
- http请求响应的组成部分的介绍 用cherome查看请求响应内容 curl命令行的使用
- python和c-C和Python我该先学什么?
- 关于linux挂载windows共享文件夹的试验
- 完善ext.grid.panel中的查询功能(紧接上一篇)
- 【微信小程序】java最简单观察者模式
- 字典按照值或键进行排序
- AI大一统:阿里达摩院发布多任务、多模态统一模型OFA
- ubuntu 压缩率最高的软件_[图]Linux六大压缩算法横评:Ubuntu 19.10最终选择LZ4
- 实习成长之路:MySQL四:深入浅出索引
- HTML静态网页我的家乡,html网站家乡 !
- 第9周项目6委派任务
- Linux下通过命令行登录北交校园网
- 部署N9e-v3运维监控平台
- Ant Design Pro模板无多标签页解决方案
- 原生js快速查找指定元素
- 关于linux移植碰到Resetting CPU ...的问题
- 国内渗透测试新神器--北极熊扫描器4.0
- linux嵌入式vi使用,嵌入式Linux编辑器vi最基本的使用.doc
- 关于模拟电子技术、考试的讲解:序章
热门文章
- 现场 | AAAI执委杨强:未来几年人工智能领域将有哪些技术热点?
- vue 如何使用定时器?
- 如何提高GPS精度?
- 计算机软件硬件试讲,2019上半年山东教师资格证高中信息技术面试试讲真题:计算机的软件系统...
- Hdu 5338 ZZX and Permutations(线段树+贪心)
- n的阶乘c语言程序迭代,C语言实现N阶乘的程序代码
- 送给29班同学们的话
- 2440+NAND Flash(K9F1208UOM)总结 收藏
- 一个android应用,搜你妹视频,你懂的
- UE-c++ className.generated.h报错:generated header must be included last in a list of includes