2016年5月9日 星期一

Activity無法接觸的非主線呈Thread可主動更新Activity內容

會特地寫這篇心得,是因為Handler Leaking一直困擾我。

在Activity可直接控制的範圍內觸發的Thread,可以用Handler.obj的方式來解決。

但如果是Activity完全接觸不到的Thread內,甚至是「第三方APP」內的Thread,這時要怎麼將Thread工作的結果回傳到Activity中?

在Guide文件「Display a location address」中曾經短暫提到的一個物件「ResultReciever」就是被設計來解決這個問題的工具。



問題是按照Google文件一慣的原則,它們完全不認為這種概念需要獨立成一個章節來介紹,仔細查了一下...確實只有這篇Guide文件有提到過這個物件,剩下的就是要進入個別API說明才會發現了。



這東西其實很簡單...

ResultReciever物件是個Parcelable介面的實作,將它當作參數傳入Intent,再經由Intent傳入獨立Thread或IntentService中,就可以在Thread結束時,(似乎是有能力偵測這個線程結束被關閉,)執行使用者實作的onRecieverResult(int code, Bundle data)中的內容。

(若是Activity可以直接控制影響的範圍,大可以直接啟動,不需要經由Intent。談到Intent,自然就是跨Activity,而且兩個Activity之間無法互通互相影響的情況。)



但是我原始的想法是在ActivityA中設置一個Intent Reciever,(通常是BroadCastReciever,)然後讓Activity接觸不到的Thread將工作結果也用Intent回傳。

如果有這個機制,這個方法就顯得很笨重多餘。

沒有留言:

張貼留言