内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

android開(kāi)發(fā)中使用Handler怎么實(shí)現(xiàn)預(yù)加載功能-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)android開(kāi)發(fā)中使用Handler怎么實(shí)現(xiàn)預(yù)加載功能,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

成都創(chuàng)新互聯(lián)公司專注于安丘網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供安丘營(yíng)銷型網(wǎng)站建設(shè),安丘網(wǎng)站制作、安丘網(wǎng)頁(yè)設(shè)計(jì)、安丘網(wǎng)站官網(wǎng)定制、微信小程序定制開(kāi)發(fā)服務(wù),打造安丘網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供安丘網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

在進(jìn)行Android客戶端界面開(kāi)發(fā)時(shí),我們常常會(huì)需要將從服務(wù)端獲取的數(shù)據(jù)展示到頁(yè)面布局上,由于數(shù)據(jù)顯示到布局的前置條件是頁(yè)面布局已初始化完成,否則會(huì)出現(xiàn)空指針異常,所以一般我們需要將網(wǎng)絡(luò)請(qǐng)求放在布局初始化完成之后。
傳統(tǒng)的頁(yè)面加載流程是:

android開(kāi)發(fā)中使用Handler怎么實(shí)現(xiàn)預(yù)加載功能

問(wèn)題:

如果加載的UI布局比較復(fù)雜,或者初始化邏輯執(zhí)行的時(shí)間比較多,那么網(wǎng)絡(luò)請(qǐng)求開(kāi)始執(zhí)行的時(shí)間就比較晚,最終完成頁(yè)面加載的時(shí)間就比較長(zhǎng)。
如果頁(yè)面初始化和網(wǎng)絡(luò)加載能同時(shí)進(jìn)行,等兩者都執(zhí)行結(jié)束后,再在布局上展示網(wǎng)絡(luò)數(shù)據(jù),這樣我們就可以縮短整個(gè)頁(yè)面的加載時(shí)間了。
所以,我們期望的頁(yè)面加載流程是:

android開(kāi)發(fā)中使用Handler怎么實(shí)現(xiàn)預(yù)加載功能

這個(gè)流程我們稱之為:預(yù)加載

預(yù)加載的目標(biāo)任務(wù)可以是一個(gè)網(wǎng)絡(luò)請(qǐng)求,也可以是其它一些耗時(shí)操作,例如:加載一張圖片到控件上展示
在實(shí)現(xiàn)預(yù)加載方案之前,我們需要了解一下Handler工作機(jī)制中的SyncBarrier概念,對(duì)Barrier概念了解可以看這篇文章中對(duì)“同步分割欄”的介紹, 此處我們簡(jiǎn)單理解為:

在MessageQueue中添加一個(gè)特殊的msg,將這個(gè)msg作為一個(gè)標(biāo)記,在這個(gè)標(biāo)記被移除之前,當(dāng)前MessageQueue隊(duì)列中排在它后面的其它(非async) 的message不會(huì)被handler處理。

我們可以先不理會(huì)什么是 非async 的message,若需要了解更多,這篇文章中對(duì)“同步分割欄”的介紹中也有相關(guān)介紹。

利用這個(gè)特性,我們可以:

啟動(dòng)一個(gè)HandlerThread來(lái)異步執(zhí)行網(wǎng)絡(luò)請(qǐng)求
設(shè)置一個(gè)標(biāo)記SyncBarrier,此后在message將一直在messageQueue中不被執(zhí)行
網(wǎng)絡(luò)請(qǐng)求成功后,post一個(gè)任務(wù)來(lái)執(zhí)行展示數(shù)據(jù)
布局初始化成功后,移除SyncBarrier
將展示數(shù)據(jù)的任務(wù)post到ui線程來(lái)執(zhí)行
步驟3和步驟4的先后順序可以交換

其中,在android api 22及之前,設(shè)置標(biāo)記SyncBarrier可以由

HandlerThread.getLooper().postSyncBarrier();

在android api 23以后,需要調(diào)用的方法為:

HandlerThread.getLooper().getQueue().postSyncBarrier();

同樣的,移除標(biāo)記的方法分別為:

HandlerThread.getLooper().removeSyncBarrier(token);
HandlerThread.getLooper().getQueue().removeSyncBarrier(token);

名稱欄目:android開(kāi)發(fā)中使用Handler怎么實(shí)現(xiàn)預(yù)加載功能-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://www.rwnh.cn/article44/dsdcee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃網(wǎng)站內(nèi)鏈、服務(wù)器托管用戶體驗(yàn)、網(wǎng)站制作、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)
桂东县| 宁蒗| 澄迈县| 应城市| 水富县| 保定市| 灵山县| 永靖县| 乐陵市| 积石山| 襄樊市| 安岳县| 合肥市| 海淀区| 津南区| 澄江县| 建瓯市| 信丰县| 莲花县| 鹿邑县| 宁城县| 乌兰浩特市| 定州市| 蓝山县| 苗栗县| 镇原县| 珠海市| 武鸣县| 桦南县| 赤城县| 宜宾县| 滨海县| 罗城| 会理县| 丰宁| 万年县| 罗江县| 久治县| 新宁县| 怀集县| 襄汾县|