close

最近看 code 遇到一些 Multi-Thead 使用上的問題,釐清一些觀念,特此紀錄一下。

在 Multi-Thead 的世界裡,每條 thread 都是一名戰士,各自執行不同的任務,卻又達成完美的 team work

譬如擒猿記裡的 Hank 是一名以速度見長的擒猿手,他的任務就是每日到無霜城外的黑暗森林裡探索未知的疆土

雖然他的速度快,但是很弱,當他執行任務時遇到等級強大 Monkey 時,根本無法與之搏鬥

硬碰硬的結果會發生 Runtime Exception: 

E/AndroidRuntime(23155): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

遇到這種情況怎麼辦呢?此時 Hank 就從懷中掏出 Adrian 交給他的錦囊,錦囊裡面藏著一張符咒,符咒上頭用硃砂寫著斗大五字:讓專業的來

Hank 一躍而起,一閃身、一轉身、凌空騰起腳一伸,順雷不及掩耳地將符咒貼到 Monkey 臉上

此時遠方一陣雷響,Monkey 龐大的身軀被吸進符咒中,被一股神祕的力量傳送到無霜城內

在 Monkey 還來不及反應之時,已被手持單手巨刃的 Adrian 揮出致命一擊,正中要害一擊斃殺

這是擒猿記裡的故事,也是  Android 系統中的真實案例

故事中的錦囊就是 Handler,符咒是 Looper,而那股神祕的力量就是 Message

有興趣的可以參考以下這篇文章:

http://blog.joomla.org.tw/android/173-Handler-Looper-Thread.html

其實跟我上面寫得差不多啦~~

嗄!你還是不懂?

幹你娘怪我囉?

 

arrow
arrow
    全站熱搜

    擒猿小舖 發表在 痞客邦 留言(0) 人氣()