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

沒有留言:

張貼留言