星期三, 9月 07, 2011

handler

Android應用程式學習筆記

Handler

在手機開發的過程有很多功能它是不能放在activity正常的操作(onClick()、onStart()...)裡面,因為這些功能處理起來較費時,比如從網路上下載文件,下載過程可能會比較長。如果我們把這個下載功能直接寫在activity裡面,就有可能導致在下載文件的過程中應用程式沒有回應,如此造成使用者比較糟糕的使用體驗。所以我們會希望將如下載等其他要處理大量數據的功能,放在單獨的thread裡面去完成,也就是說activity是一個thread,而下載文件又是一個thread,那處理下載文件的thread並不會影響處理activity的thread,異步的message處理,這就是我們開發當中所遇到的問題。那麼handler的設計就是專門讓我們解決以上類似的問題。

Queue是一種資料結構,遵循了先進先出的特性,與另一資料結構堆疊不同,堆疊屬於先進後出,可以把Queue想像成隧道,先進隧道的車子 就會先出隧道,如果每輛車子車速都一樣。那每一個Hanlder都伴隨著一個thread以及這個thread的queue,叫做MessageQueue,先加入queue中的message會先被取出來處理,處理完後再取出下一個message,再處理。

Handler允許我們寄送及處理message與使用runnable物件,當我們創造一個handler物件,就會綁定一個queue,我們可以傳送message和runnable物件到message queue中,然後當它們從queue中被取出後執行。

Handler物件透過調用以下方法管理thread
post(Runnable r )-把r物件加到message queue中,r將會在thread中處理。
postDelayed(Runnable r , long delayMillis)-延遲delayMillis毫秒將r加到message queue中。
removeCallback(Runnable r)-將r的message queue中的所有message移除。

Handler物件透過調用以下方法讓thread與main thread通訊
obtainMessage()-從全域訊息池中回傳一個新的message物件,比起創造或配置更加有效率。
sendMessage(Message msg)-將msg物件加入message queue中。
handleMessage(Message msg)-透過此方法接收msg物件,得到msg物件裡的數據。

沒有留言:

張貼留言