使用Handler線上程之間傳遞訊息所遇到的問題及解決方案

來源:互聯網
上載者:User

目的是這樣的:線程A實現錄影功能,所要進行的操作是網路連接與錄影儲存,並且在錄影過程中需要與主線程,即UI線程進行互動,然後線程A根據UI線程中的響應結果進行下一步處理。簡單來說就是主線程與子線程相互傳遞資訊,並且主線程會通過所傳遞的資訊控制子線程的操作。

相互之間傳遞資訊不是痛點,痛點是主線程要通過傳遞資訊來控制子線程的操作,我們都知道,子線程的執行不依賴於主線程,當我們把子線程中的狀態資訊傳遞給主線程之後,在主線程根據子線程的狀態資訊進行判斷時,子線程仍會繼續執行,但我們要實現的是當主線程判斷結束後,子線程才能執行隨後的操作。

剛開始我採用方法是讓子線程處於不斷迴圈狀態,直到主線程做完響應後再將布爾變數賦為false,從而使得子線程根據響應結果繼續執行。但這樣做結果是行不通的,原因就在於子線程處理主線程所傳遞資訊的操作會由於之前子線程在某一點不斷迴圈而無法進行,這也說明重寫的Handler類中的handleMessage方法也是在子線程中執行的。於是就重新調整了思路,當子線程發送需要主線程定奪(其實就是需要使用者定奪)的Message後,就結束當前線程,然後再根據主線程的響應重新開啟線程進行處理,問題解決。但這個過程導致不得不儲存許多狀態資訊,用來重啟線程時使用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.