Android 從現實生活中理解線程消息機制
來源:
發布時間:2010/8/28
瀏覽次數:862
android 有一種叫消息隊列的說法,這里我們可以這樣理解:假如一個隧道就是一個消息隊列,那么里面的每一部汽車就是一個一個消息,這里我們先忽略掉超車等種種因素,只那么先進隧道的車將會先出,這個機制跟我們android 的消息機制是一樣的。
Android 的線程消息機制
android 在設計的時候引入了 wince 的消息機制,即將每一個消息發送到隊列里面,遵循先進先出原則。發送消息并不會阻塞線程,而接收線程會阻塞線程,這是因為 Android 的Handler 機制,當Handler 處理完一個 Message 對象才會接著去取下面一個消息進行處理,如下圖:
這里記住:Android里并沒有Global的Message Queue數據結構,例如,不同APK里的對象不能透過Massage Queue來交換訊息(Message)。例如:線程A的Handler對象可以傳遞消息給別的線程,讓別的線程B或C等能送消息來給線程A(存于A的Message Queue里)。線程A的Message Queue里的訊息,只有線程A所屬的對象可以處理。
案例分析:
經典的歌詞同步,這時我們不僅要聽到優質的歌曲,還要可以有歌詞同步,這時另開一條線程來處理歌詞的同步是比較好的解決辦法,你可以根據自己的定義,抓取歌曲的duration 在線程中處理歌詞的前進或者后退。。。
Demo 分析:
下面我們來實現一個Iphone 上的一個通過按數字后,數字過多消除的按鈕事件。事件的原理如下,事件要的效果是這樣的,當長按消除按鈕后,數字會慢慢消除,過會消除速度會增快,那么實現這個效果我們就需要自己做一個小鍵盤,我做的鍵盤效果如下:
我們通過點擊
來達到這個效果,使用的是android 的線程機制。實現代碼如下:
private Thread thread;
private TextView tv_call_no;
protected static Runnable Runablerun = null;