最近這幾天…

最近這幾天研究了 Android 有關 Handler 部分的程式,另外在開發程式上的需求,也看了 AsyncQueryHandler  部分的程式,以下是一些心得。

1. AsyncQueryHandler 也是一種 Handler,同時也繼承了 Handler 類別,所以也可以使用 post 方法傳入一個 Runnable 物件,同時透過 main thread (通常是 main thread)執行 Runnable 方法中 run() 的內容。

2.若是在 main thread 執行的程式中,建立多個 Handler 物件 (AsyncQueryHandler 也是),這些 Handler 會將 message 塞入同一個(也是同一個 thread 中唯一的一個) MessageQueue 中,等待被 thread 執行。

因為Handler 物件都是透過 TheadLocal 類別來取得 mLooper 物件(每一個 thread 只會有一個 Loop 物件實例),同時一個 Looper 物件只會有一個 MessageQueue。因此可以推論,若是同一個 thread 中建立多個 Handler,雖然各個 Handler 物件可以各自使用 sendMessage() 方式將 message 送到 MessageQueue 中存放,等待被 Looper 抓取並執行,但是都是使用同一個MessageQueue,只是由各個不同的 Handler 塞入的 Message。

這樣做的好處,有的開發者是認為可以透過建立不同的 Handler及不同的 handleMessage() 來將各個不同的程式碼分類。但是不建立多個  Handler,也可以透過使用 Handler.post(Runnable r) 物件,傳入不同的 Runnable  物件來執行不同的程式碼,也可以用這個方式將程式碼分類。

 

參考資料:

1.Android 2.1: Muliple Handlers in a Single Activity

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: