2018年10月31日 星期三
Android Callback、Handler 差別
Callback
因為Android 常使用other thread做資料處理的動作(background deal,not UI thread),所以當訊息處理完,時常需要回覆給UI thread處理完畢(但這時候回覆訊息到UI thread的部分,還是other thread負責,所以不能直接更新UI),所以這時候就有callback機制。
專案簡單說明:
1.MainActivity new 一個DownLoadService 準備要下載東西,但我需要一個回應說DownLoadService下載好了。
2.使用interface 做出一個OnDownLoadListener,給MainActivity實作出來方法。
3.MainActivity使用setOnDownLoadListener,將MainActivity實作出來的OnDownLoadListener,給downLoadService。
4.這時候downLoadService可以下載東西,下載完之後使用onDownLoadListener.onComplete("String")回應給mainActivity實作的方法,就可以達到不同trhead但可以異步訊息傳送。
注:加上Looper.prepare() and Looper.loop()
是因為toast.show要有一個Looper把taost(本身用到UI thread)傳遞給message queue,讓handler抓message(toast)出來處理。
而一個new thread沒有Looper,所以要Looper.prepare(),給他一個new looper,之後讓他loop.loop給他插入toast進入 message queue。
github:https://github.com/TakmingMark/PracticeCallback
Handler
主要是當處理完畢的資料,需要和UI講,講完之後就可以更新資料(Handler處理是在UI同一線程,所以可以更新UI)
github:https://github.com/TakmingMark/PracticeHandler
合起來使用的話,來講一下使用情況。
callback就像一個員工A,他要一直處理照片傳輸的問題。
handler就像一個員工B,他要監控員工A,當員工A把照片傳輸做完時,回傳一個訊息給員工B,然後員工B告訴老闆(UI update)說照片傳輸完畢
github:https://github.com/TakmingMark/CallbackAndHandler
參考文章:
https://blog.csdn.net/ErLiangCode/article/details/52117831
http://andy02172001.blogspot.com/2017/10/androidinterfacecall-back.html
https://blog.csdn.net/ErLiangCode/article/details/52117831
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言