<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          自學(xué)HarmonyOS應(yīng)用開發(fā)(60)- 使用異步延遲派發(fā)任務(wù)實(shí)現(xiàn)操作延時(shí)

          當(dāng)我們使用地圖功能實(shí)時(shí)跟蹤設(shè)備位置的時(shí)候,一般會希望保證可以顯示最新位置。但也有可能操作者希望確認(rèn)周邊信息而暫時(shí)脫離最新位置,等周邊信息確認(rèn)完成之后再自動回到最新位置。

          動作視頻如下:

          我們通過發(fā)布異步延遲派發(fā)任務(wù)來實(shí)現(xiàn)這個(gè)功能。


          計(jì)算無操作時(shí)間

          我們準(zhǔn)備一個(gè)定時(shí)器,每當(dāng)用戶對屏幕進(jìn)行操作時(shí)更新最后操作時(shí)刻。

          void resetOperationTimer(){    lastOperation = Calendar.getInstance().getTimeInMillis();}

          在需要檢查時(shí),將當(dāng)前時(shí)刻和最后的操作時(shí)刻進(jìn)行比較就可以判斷是否超過操作延時(shí)時(shí)長了。

          boolean isOperationTimeout(){    return (Calendar.getInstance().getTimeInMillis() - lastOperation) > operationTimeout;}


          發(fā)布異步延遲派發(fā)任務(wù)

          在重置最后操作時(shí)刻時(shí)我們同時(shí)發(fā)行一個(gè)異步延遲派發(fā)任務(wù):

          void reserveInvalidate(){    TaskDispatcher uiTaskDispatcher = mContext.getUITaskDispatcher();    Revocable revocable = uiTaskDispatcher.delayDispatch(new Runnable() {        @Override        public void run() {            visibleAreaCheck();        }    }, operationTimeout);}
          void visibleAreaCheck(){ //如果最新位置超出顯示位置 if (lastLocation != null && isOperationTimeout()){ Rect bound = new Rect(0, 0, getWidth(), getHeight()); Size offset = Tile.calculateOffset(512, zoom, location, lastLocation); int x = getWidth() / 2 + offset.width; int y = getHeight() / 2 + offset.height; if(!bound.isInclude(x, y)) { location = lastLocation; invalidate(); } }}

          有幾點(diǎn)需要注意:

          1. 這個(gè)任務(wù)是發(fā)布到UI線程的,這樣的好處是不必考慮多線程之間的上下文切換。

          2. 如果在進(jìn)行可視范圍檢查時(shí),時(shí)間差沒有達(dá)到事先指定的時(shí)長,那就意味著中間又發(fā)生了新的操作,則本次檢查取消。也就是說,只要操作繼續(xù)就不會發(fā)生顯示位置重置。


          參考代碼

          完整代碼可以從以下鏈接下載:

          https://github.com/xueweiguo/Harmony/tree/master/StopWatch


          作者著作介紹

          《實(shí)戰(zhàn)Python設(shè)計(jì)模式》是作者去年3月份出版的技術(shù)書籍,該書利用Python 的標(biāo)準(zhǔn)GUI 工具包tkinter,通過可執(zhí)行的示例對23 個(gè)設(shè)計(jì)模式逐個(gè)進(jìn)行說明。這樣一方面可以使讀者了解真實(shí)的軟件開發(fā)工作中每個(gè)設(shè)計(jì)模式的運(yùn)用場景和想要解決的問題;另一方面通過對這些問題的解決過程進(jìn)行說明,讓讀者明白在編寫代碼時(shí)如何判斷使用設(shè)計(jì)模式的利弊,并合理運(yùn)用設(shè)計(jì)模式。

          對設(shè)計(jì)模式感興趣而且希望隨學(xué)隨用的讀者通過本書可以快速跨越從理解到運(yùn)用的門檻;希望學(xué)習(xí)Python GUI 編程的讀者可以將本書中的示例作為設(shè)計(jì)和開發(fā)的參考;使用Python 語言進(jìn)行圖像分析、數(shù)據(jù)處理工作的讀者可以直接以本書中的示例為基礎(chǔ),迅速構(gòu)建自己的系統(tǒng)架構(gòu)。




          覺得本文有幫助?請分享給更多人。

          關(guān)注微信公眾號【面向?qū)ο笏伎肌枯p松學(xué)習(xí)每一天!

          面向?qū)ο箝_發(fā),面向?qū)ο笏伎迹?/span>



          瀏覽 46
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产又大又黄又硬又粗视频 | cao逼视频 | 久干网| 天堂无码av | 欧美日视频 |