国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【Android開發(fā)技巧】在Activity頁面中如何實(shí)現(xiàn)Fragment數(shù)據(jù)的緩加載

lwx12525 / 2184人閱讀

摘要:簡述漸漸的在開發(fā)道路上更注重的性能,數(shù)據(jù)的預(yù)加載的處理。那如何才能更好的處理這個(gè)問題呢那就需要我們開發(fā)人員自定義實(shí)現(xiàn)數(shù)據(jù)的緩加載。在這里實(shí)現(xiàn)數(shù)據(jù)的緩加載在,我增加了三個(gè)方法,一個(gè)是,即被設(shè)置為可見時(shí)調(diào)用,一個(gè)是,即被設(shè)置為不可見時(shí)調(diào)用。

簡述:

漸漸的在開發(fā)道路上更注重App的性能, 數(shù)據(jù)的預(yù)加載的處理。在日常開發(fā)APP,一個(gè)Activity里面有可能會(huì)是有Viewpager與多個(gè)Fragment來進(jìn)行組合,而如果每個(gè)Fragment都需要通過網(wǎng)絡(luò)加載數(shù)據(jù),或加載本地緩存。 如果當(dāng)前Activity創(chuàng)建的時(shí)候就需要初始化大量的資源,需要網(wǎng)絡(luò)加載,從服務(wù)器loding。這樣的結(jié)果,我們也不會(huì)同意。那如何才能更好的處理這個(gè)問題呢? 那就需要我們開發(fā)人員自定義實(shí)現(xiàn)Fragment數(shù)據(jù)的緩加載。

答案:在Fragment里的setUserVisibleHint這個(gè)方法里

該方法用于告訴系統(tǒng),這個(gè)Fragment的UI是否是可見的。所以我們只需要繼承Fragment并重寫該方法,即可實(shí)現(xiàn)在fragment可見時(shí)才進(jìn)行數(shù)據(jù)加載操作,即Fragment的懶加載。

public abstract class LazyFragment extends Fragment {

protected boolean isVisible;  
/** 
 * 在這里實(shí)現(xiàn)Fragment數(shù)據(jù)的緩加載. 
 * @param isVisibleToUser 
 */  
@Override  
public void setUserVisibleHint(boolean isVisibleToUser) {  
    super.setUserVisibleHint(isVisibleToUser);  
    if(getUserVisibleHint()) {  
        isVisible = true;  
        onVisible();  
    } else {  
        isVisible = false;  
        onInvisible();  
    }  
}  

protected void onVisible(){  
    lazyLoad();  
}  

protected abstract void lazyLoad();  

protected void onInvisible(){}  

}

在LazyFragment,我增加了三個(gè)方法,一個(gè)是onVisiable,即fragment被設(shè)置為可見時(shí)調(diào)用,一個(gè)是onInvisible,即fragment被設(shè)置為不可見時(shí)調(diào)用。另外再寫了一個(gè)lazyLoad的抽象方法,該方法在onVisible里面調(diào)用。你可能會(huì)想,為什么不在getUserVisibleHint里面就直接調(diào)用呢?

我這么寫是為了代碼的復(fù)用。因?yàn)樵趂ragment中,我們還需要?jiǎng)?chuàng)建視圖(onCreateView()方法),可能還需要在它不可見時(shí)就進(jìn)行其他小量的初始化操作(比如初始化需要通過AIDL調(diào)用的遠(yuǎn)程服務(wù))等。而setUserVisibleHint是在onCreateView之前調(diào)用的,那么在視圖未初始化的時(shí)候,在lazyLoad當(dāng)中就使用的話,就會(huì)有空指針的異常。而把lazyLoad抽離成一個(gè)方法,那么它的子類就可以這樣做:

public class OpenResultFragment extends LazyFragment{

// 標(biāo)志位,標(biāo)志已經(jīng)初始化完成。  
private boolean isPrepared;  

@Override  
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  
    Log.d(LOG_TAG, "onCreateView");  
    View view = inflater.inflate(R.layout.fragment_open_result, container, false);  
    //XXX初始化view的各控件  
isPrepared = true;  
    lazyLoad();  
    return view;  
}  

@Override  
protected void lazyLoad() {  
    if(!isPrepared || !isVisible) {  
        return;  
    }  
    //填充各控件的數(shù)據(jù)  
}  

}
在上面的類當(dāng)中,我們?cè)黾恿艘粋€(gè)標(biāo)志位isPrepared,用于標(biāo)志是否初始化完成。然后在我們所需要的初始化操作完成之后調(diào)用,如上面的例子當(dāng)中,在初始化view之后,設(shè)置 isPrepared為true,同時(shí)調(diào)用lazyLoad()方法。而在lazyLoad()當(dāng)中,判斷isPrepared和isVisible只要有一個(gè)不為true就不往下執(zhí)行。也就是僅當(dāng)初始化完成,并且可見的時(shí)候才繼續(xù)加載,這樣的避免了未初始化完成就使用而帶來的問題。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/73679.html

相關(guān)文章

  • 01.Android之基礎(chǔ)組件問題

    摘要:此時(shí)再次旋轉(zhuǎn)屏幕時(shí),該不會(huì)被系統(tǒng)殺死和重建,只會(huì)調(diào)用。因此可通過和來判斷是否被重建,并取出數(shù)據(jù)進(jìn)行恢復(fù)。但需要注意的是,在取出數(shù)據(jù)時(shí)一定要先判斷是否為空。只有在進(jìn)程不被掉,正常情況下才會(huì)執(zhí)行方法。 目錄介紹 1.0.0.1 說下Activity的生命周期?屏幕旋轉(zhuǎn)時(shí)生命周期?異常條件會(huì)調(diào)用什么方法? 1.0.0.2 后臺(tái)的Activity被系統(tǒng)回收怎么辦?說一下onSaveInsta...

    iamyoung001 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<