android懒加载简书,Android之Fragment懒加载

还记得以前使用ViewPager+Fragment时根本不考虑效率问题,一股脑的多页数据加载导致卡死,还自我安慰说我设置了setOffscreenPageLimit了啊,而实际上跟踪源码我们发现DEFAULT_OFFSCREEN_PAGES = 1,所以即便setOffscreenPageLimit我设置为0,ViewPager最少也会加载后一页。为了保证效率现在都提倡一种懒加载的机制,即只有当前页面为显示页面才会加载且只加载一次数据(做一次耗时操作:或网络请求或本地数据)。有同学说我可以拷贝源码把默认改为0啊,是可以这么做,但是改变了viewpager的初衷,不够灵活。在实际项目中我还是建议改造BaseFragment,利用setUserVisibleHint,暴露数据加载的方法,根据需要重载懒加载方法做实际操作。

下面来看具体的改造方法:

1.设定两个标识

private boolean isViewPrepared; // 标识fragment视图已经初始化完毕

private boolean hasFetchData; // 标识已经触发过懒加载数据

2.创建懒加载的数据加载方法

/** 懒加载的方式获取数据,仅在满足fragment可见和视图已经准备好的时候调用一次 */

protected void lazyFetchData() {

Log.v(TAG, getClass().getName() + "------>lazyFetchData");

}

3.以上两个标识值的判定:

在onViewCreated方法中(即表明视图已经准备完毕)isViewPrepared = true;

在onDestroyView方法中(view被销毁后,将可以重新触发数据懒加载,因为在viewpager下,fragment不会再次新建并走onCreate的生命周期流程,将从onCreateView开始)hasFetchData = false; isViewPrepared = false;

4.判定是否需要加载数据

private void lazyFetchDataIfPrepared() {

// 用户可见fragment && 没有加载过数据 && 视图已经准备完毕

if (getUserVisibleHint() && !hasFetchData && isViewPrepared) {

hasFetchData = true; //已加载过数据

lazyFetchData();

}

}

5.lazyFetchDataIfPrepared方法的调用时机

onViewCreated方法中调用lazyFetchDataIfPrepared方法,此时只有首页会符合条件

setUserVisibleHint

@Override

public void setUserVisibleHint(boolean isVisibleToUser) {

super.setUserVisibleHint(isVisibleToUser);

Log.v(TAG, getClass().getName() + "------>isVisibleToUser = " + isVisibleToUser);

if (isVisibleToUser) {//当当前为显示页面时

lazyFetchDataIfPrepared();

}

}

6.子类Fragment根据需要重载lazyFetchData方法(访问网络加载数据)

@Override

protected void lazyFetchData() {

((DiscoverPresenter) mPresenter).getData();

}

整个改造就算结束了,是不是很简单,为了让你的fragment不那么累赶紧试试吧(如果还有不懂可以参照源码)。

fccc7716f47e?from=groupmessage

qq交流群:138485840

下载地址:微影

源码地址:Ghost

欢迎大家下载和Star

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案 方案是为解决特定问题或达成特定目标而制定的一系列计划或步骤。它的作用是提供一种系统性的方法,以有效地应对挑战、优化流程或实现目标。以下是方案的主要作用: 问题解决: 方案的核心目标是解决问题。通过系统性的规划和执行,方案能够分析问题的根本原因,提供可行的解决方案,并引导实施过程,确保问题得到合理解决。 目标达成: 方案通常与明确的目标相关联,它提供了一种达成这些目标的计划。无论是企业战略、项目管理还是个人发展,方案的制定都有助于明确目标并提供达成目标的路径。 资源优化: 方案在设计时考虑了可用资源,以最大化其效用。通过明智的资源分配,方案可以在有限的资源条件下实现最大的效益,提高效率并减少浪费。 风险管理: 方案通常会对潜在的风险进行评估,并制定相应的风险管理策略。这有助于减轻潜在问题的影响,提高方案的可行性和可持续性。 决策支持: 方案提供了决策者所需的信息和数据,以便做出明智的决策。这种数据驱动的方法有助于减少不确定性,提高决策的准确性。 团队协作: 复杂的问题通常需要多个人的协同努力。方案提供了一个共同的框架,帮助团队成员理解各自的职责和任务,促进协作并确保整个团队朝着共同的目标努力。 监控与评估: 方案通常包括监控和评估的机制,以确保实施的有效性。通过定期的评估,可以及时调整方案,以适应变化的环境或新的挑战。 总体而言,方案的作用在于提供一种有序、有计划的方法,以解决问题、实现目标,并在实施过程中最大化资源利用和风险管理。 方案是为解决特定问题或达成特定目标而制定的一系列计划或步骤。它的作用是提供一种系统性的方法,以有效地应对挑战、优化流程或实现目标。以下是方案的主要作用: 问题解决: 方案的核心目标是解决问题。通过系统性的规划和执行,方案能够分析问题的根本原因,提供可行的解决方案,并引导实施过程,确保问题得到合理解决。 目标达成: 方案通常与明确的目标相关联,它提供了一种达成这些目标的计划。无论是企业战略、项目管理还是个人发展,方案的制定都有助于明确目标并提供达成目标的路径。 资源优化: 方案在设计时考虑了可用资源,以最大化其效用。通过明智的资源分配,方案可以在有限的资源条件下实现最大的效益,提高效率并减少浪费。 风险管理: 方案通常会对潜在的风险进行评估,并制定相应的风险管理策略。这有助于减轻潜在问题的影响,提高方案的可行性和可持续性。 决策支持: 方案提供了决策者所需的信息和数据,以便做出明智的决策。这种数据驱动的方法有助于减少不确定性,提高决策的准确性。 团队协作: 复杂的问题通常需要多个人的协同努力。方案提供了一个共同的框架,帮助团队成员理解各自的职责和任务,促进协作并确保整个团队朝着共同的目标努力。 监控与评估: 方案通常包括监控和评估的机制,以确保实施的有效性。通过定期的评估,可以及时调整方案,以适应变化的环境或新的挑战。 总体而言,方案的作用在于提供一种有序、有计划的方法,以解决问题、实现目标,并在实施过程中最大化资源利用和风险管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值