Handler相關(guān)

原理:

Handler 、 Looper 、Message 這三個是Android異步消息處理線程相關(guān)的概念。異步消息處理線程啟動后會進(jìn)入一個無限的循環(huán)體之中,每次循環(huán),從其內(nèi)部的消息隊列中取出一個消息,然后回調(diào)相應(yīng)的消息處理函數(shù),執(zhí)行完成一個消息后則繼續(xù)循環(huán)。若消息隊列為空,線程則會阻塞等待。

Looper創(chuàng)建一個MessageQueue,然后進(jìn)入一個無限循環(huán)體不斷從該MessageQueue中讀取消息,而消息的創(chuàng)建者就是一個或多個Handler 。

使用:

private Handler mHandler = newHandler()

{

? ? ? ? ? public void handleMessage(android.os.Message?msg)

? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? switch(msg.what)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ?case value:

? ? ? ? ? ? ? ? ? ? ?break;

? ? ? ? ? ? ? ? ? ? ?default:

? ? ? ? ? ? ? ? ? ? ?break;

? ? ? ? ? ? ? ? }

? ? ? ? ? };

};

mHandler.sendMessage();


2,

private Handler mHandler =new Handler();

mHandler.post(newRunnable()

{

? ?@Override

? ?public void run()

? ?{

? ? ? Log.e("TAG",?Thread.currentThread().getName());

? ? ? ?mtv.setText("test");

? ?}

});


注意:

1, 避免內(nèi)存泄漏

a) 內(nèi)部類隱式包含外部類的引用

解決方法:

1,改為靜態(tài)內(nèi)部類。

2,或者手動管理線程及時結(jié)束以釋放對象

b) 結(jié)果執(zhí)行體中包含有View類,View會持有外部Context。

解決方法:

使用弱連接

2, Handler事實上提供了一個異步線程處理但方案,可以放在其他地方使用


參考:

https://my.oschina.net/rengwuxian/blog/181449

http://blog.csdn.net/feelang/article/details/39059705

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容