暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Android优化Fragment的数据加载方式之懒加载实现

WTech 2018-04-03
583


ViewPagerandroid开发中经常用到的一个控件。假如ViewPager中的每一个Fragment都需要通过网络拉取数据加载,而ViewPager是默认加载前两项的,所以很容易造成网络丢包或者网络堵塞等问题,因此Fragment使用懒加载就显得很有必要。

其实要实现fragment懒加载也并不复杂,在Fragment中有一个setUserVisibleHint
方法,这个方onCreate()方法更早被调用的它会通过isVisibleToUser告诉我们当前Fragment是否可见,那么我们就可以在可见的时候再进行网络加载

public void setUserVisibleHint(boolean isVisibleToUser)

只有fragment可见时,
isVisibleToUser


true
,否则为
false
。所以我们可以重写
setUserVisibleHint
方法,然后在可见时进行网络数据加载:
public void setUserVisibleHint(boolean isVisibleToUser) {    

if (isVisibleToUser) {        

        pullData();    

    }    super.setUserVisibleHint(isVisibleToUser);

}


但是我们一般都会在数据加载完成时更新
UI
,就有可能当拉取数据是极快就返回,但是
UI还没有绑定
,或者是
Adapter
初始化等,那么就无法更新
UI
了,所以
Fragment
给我们提供了另一个方法getUserVisibleHint()
,它就是用来判断当前
Fragment
是否可见,所以我们就可以在一系列变量初始化完成后再判断是否可见,若可见再进行数据拉取:

public void onStart() {    

    super.onStart();    

    Log.d("TAG", mTagName + " onStart()");        ...    

    if(getUserVisibleHint()) {                        pullData();    

  } 

}

    当然,如果你的网络请求并不需要涉及
UI
更新,那么就可以直接在
setUserVisibleHint(boolean 

isVisibleToUser
)
里操作。所以最终还是要根据各自的实际用途来使用。


更多精彩内容,请关注山楂干Linux


文章转载自WTech,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论