Android懒加载Fragment

背景

最近在完成需求后在修改代码,发现某些东西写的不恰当,我这边完善下fragment的懒加载。

功能

这可以帮助优化应用的性能,减少不必要的资源消耗。懒加载意味着只有当Fragment变得可见时,才加载数据或执行昂贵的操作。

实现

1.创建一个BaseFragment作为所有需要懒加载的Fragment的基类,用于封装通用的懒加载逻辑。

public abstract class BaseLazyFragment extends Fragment {

    // 标记是否已经初始化过
    private boolean isPrepared;
    // 标记Fragment是否已经附加到Activity
    private boolean hasAttached;

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser && isPrepared && hasAttached) {
            onVisible();
        }
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        hasAttached = true;
        if (getUserVisibleHint()) {
            onVisible();
        }
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        isPrepared = true;
        if (getUserVisibleHint()) {
            onVisible();
        }
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        isPrepared = false;
        hasAttached = false;
    }

    protected abstract void onVisible();
}

2.实现onVisible()方法

在继承自BaseLazyFragment的子类中,你需要实现onVisible()方法,该方法会在Fragment变为可见时被调用。在这个方法里,你可以执行数据加载、网络请求等操作。

public class MyLazyFragment extends BaseLazyFragment {

    @Override
    protected void onVisible() {
        // 当Fragment可见时,加载数据或执行其他操作
        loadData();
    }

    private void loadData() {
        // 模拟数据加载
        // 可以在这里发起网络请求,加载数据等
    }
}

3. 使用Fragment

现在,你可以在你的Activity或Fragment中使用MyLazyFragment,并且当它变得可见时,数据将会被加载。

4.配合ViewPager使用

如果你是在ViewPager中使用Fragment,那么还需要注意以下几点:
使用FragmentStatePagerAdapter或FragmentStateAdapter,因为它们会保留Fragment的状态,从而支持懒加载。
设置ViewPager的setOffscreenPageLimit方法,限制预加载的页面数量,以减少内存消耗。

5. 注意事项

确保在onVisible()方法中处理好网络请求和数据加载的异步操作,避免阻塞UI线程。
在onPause()或onStop()方法中停止任何正在进行的加载或定时任务,以节省资源。
通过上述步骤,你可以为你的Android应用设计一个有效的懒加载Fragment,从而提升应用的性能和用户体验。

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值