最近看 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
其實跟我上面寫得差不多啦~~
嗄!你還是不懂?
幹你娘怪我囉?