歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android入門開發之 Handler使用

Android入門開發之 Handler使用

日期:2017/3/1 9:57:59   编辑:Linux編程

Android提供了一個異步的消息回調機制Handler, 它負責發送消息和處理線程消息隊列中的消息及runnable對象

Handler實例都是與一個線程和該線程的消息隊列一起使用,一旦創建了一個新的handler實例,系統就把該實例與一個線程和該線程的消息隊列捆綁起來,這將可以發送消息和runnable對象給該消息隊列,並在消息隊列出口處處理它們。

Handler默認使用當前的線程RunLoop, 但是也可以通過它的構造函數來指定某個線程的runloop, 或者使用專用的HandlerThread。

必須要注意的是, 使用Handler的線程中,必須實現了Runloop消息循環,否則會產生運行異常。

通常情況下,如果我們在主線程使用Handler, 則不需要我們主動去創建runloop, 因為android系統為自動為activity主線程創建一個runloop。

同樣我們可以在一個特殊的子線程中使用Handler,而不必去創建runloop。這個特殊子線程就是HandlerThread, 查看其源碼,我們可以發現,它也在run方法中實現了runloop。

下面就介紹Handler的幾種使用場景和用法:

1. 在主線程中使用Handler

主線程中使用Handler相對簡單, 下面的示例代碼實現了在主線程中創建Handler對象,啟動一個runable方法去刷新進度條。

代碼如下:

//在主線程中創建一個Handler對象

Handler handler = new Handler()
{
public void handleMessage(Message msg)
{
firBar.setProgress(msg.arg1);
handler.post(updateThread);

Log.v("thread----", Thread.currentThread().getName());
}
};

handler.post(updateThread); //去運行

//創建一個runable去刷新進度條

Runnable updateThread = new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
if ( i>= 100) {
handler.removeCallbacks(updateThread);
return;
}



i += 10;

Message msg = handler.obtainMessage();
msg.arg1 = i;

try {
Thread.sleep(1000); //線程暫停1s
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}

handler.sendMessage(msg);
handler1.sendEmptyMessage(0);

}
};

Copyright © Linux教程網 All Rights Reserved