天天看點

android handler 簡介

android的handler 是一個神奇東西,處理異步消息的時候,我們離不開他.那麼他的具體的介紹是什麼了?

handler基本概念:

      handler主要用于異步消息的處理:當發出一個消息之後,首先進入一個消息隊列,發送消息的函數即刻傳回,而另外一個部分逐個的在消息隊列中将消息取出,然後對消息進行出來,就是發送消息和接收消息不是同步的處理。 這種機制通常用來處理相對耗時比較長的操作。

對于handler的常用的一些方法有:

 post(runnable)

        postattime(runnable,long)

        postdelayed(runnable long)

        sendemptymessage(int)

        sendmessage(message)

        sendmessageattime(message,long)

        sendmessagedelayed(message,long)

以上post類方法允許你排列一個runnable對象到主線程隊列中,

 sendmessage類方法, 允許你安排一個帶資料的message對象到隊列中,等待更新.

下面我們做一個小demo對handler有深一步的了解。

基本的業務描述是這樣的:我們要做一個耗時的操作,要将新的runnable接口放到主程隊列中。相應的源代碼如下:

在這個demo中,整個過程如下:

程式已啟動,就把myrunnable加入到消息隊列中,android的handler是異步機制,是以在handler.post(new myrunnable());  之後,程式會繼續執行,是以以後的語句會繼續,這時候我們輸出oncreate中的目前線程id。同時myrunnable的run方法也在運作,一樣輸出run方法中的目前線程id,然後讓線程休眠6秒。

demo的結果分析:

1:控制台的輸出: oncreate---the thread id is :1

                              runnable---the thread is running

                              runnable---the thread id is :1

2:程式啟動後6秒,我們才看到main.xml中的内容(隻有一個textview)

這2個結果都表明handler和主線程是同一個線程。如果這時候你做的是一個耗時的操作(比如下載下傳),那麼這樣是不可行的。

于是,android給我們提供了looper這樣一個類。其實android中每一個thread都跟着一個looper,looper可以幫助thread維護一個消息隊列.、

這個demo 進一步告訴我們handler與looper之間的互相聯系. 

繼續閱讀