Android按需加载的实现-懒加载

1.为什么需要懒加载出现?

        很多时候我们在做程序加载的时候会发现,有时候因为对象创建的顺序不一定,而导致在加载的时候出现null或者其他的异常所以就需要一种能够解决这种不确定的加载请求。

2.解决问题的关键在哪里?

        1.请求先后 2.要满足一次请求任务

3.例如懒加载的用例
   首先在创建的时候设置允许进行加载也就是第一个可加载条件
   public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        fragmentLazyloadHelper.setViewHasCreate(true);

    }
    在显示状态中设置另一个满足条件
 @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        fragmentLazyloadHelper.setVisibleToUser(isVisibleToUser);
    }
getFragmentLazyloadHelper().bind(this);//注册可接受事件 然后也可以通过unbind实现事件的解绑





 /**
     * 用来处理懒加载的  安全的避免了视图未加载导致的null对象
     * <p>
     * todo 目前没有发现问题
     */
    public static class FragmentLazyLoadHelper {
        boolean isVisibleToUser = false;
        boolean isViewHasCreate = false;
        boolean isEnableAccept = true;

        //设置是否允许进行懒加载 默认允许懒加载
        public void setEnableAccept(boolean enableAccept) {
            isEnableAccept = enableAccept;
        }

        public void setViewHasCreate(boolean viewHasCreate) {
            isViewHasCreate = viewHasCreate;
            if (isViewHasCreate)
                requeLazyLoad();
        }

        public void setVisibleToUser(boolean visibleToUser) {
            isVisibleToUser = visibleToUser;
            if (visibleToUser) {
                isHasRequestLayLoad = false;
                requeLazyLoad();
            }
        }

        public boolean isViewHasCreate() {
            return isViewHasCreate;
        }

        //是否是当前显示的状态  当然因为第一页直接设置了为true
        public boolean isVisibleToUser() {
            return isVisibleToUser;
        }

        ILazyLoadListener lazyLoadListener;

        public interface ILazyLoadListener {
            void accept();
        }

        //是否已经懒加载过
        boolean isHasRequestLayLoad = false;

        //请求拉去事件
        //总之   只要想要达到 视图可见时候操作数据都可以通过这个回调
        public void requeLazyLoad() {
            //不允许懒加载
            if (!isEnableAccept) {
                return;
            }
            if (isHasRequestLayLoad)
                return;
            //如果是可见的状态 并且视图已经加载完毕
            if (isVisibleToUser() && isViewHasCreate()) {
                //如果视图加载完成状态 说明可以加载了
                if (lazyLoadListener != null) {
                    lazyLoadListener.accept();
                    isHasRequestLayLoad = true;
                }
            }
        }


        public void bind(ILazyLoadListener listener) {
            lazyLoadListener = listener;
        }

        //解绑了以后就不会在接收到任何事件
        public void unbind() {
            lazyLoadListener = null;
        }
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值