Hatena::Groupandroid

dann@android

 | 

2009-06-27

Handlerのソースを読んでみた

03:29 | Handlerのソースを読んでみた - dann@android を含むブックマーク はてなブックマーク - Handlerのソースを読んでみた - dann@android

androidのソース読み。Handlerの仕組みがわかった。

要するに、UI Threadはシングルスレッドで他のスレッドからいじれないようにしていて、そのUI ThreadでUIを操作させるのだけれど、UIを他のスレッドからマルチスレッド風にいじりたいときにHandlerは使う。

流れは、大体以下のような感じ。

  • messageにcallbackとしてRunnableを設定
  • MessageQueueにMesssageをいれて(あてさきはHandler自身)
  • Looperがmessage queueからmessageとりだして
  • Messageの宛先(Handler)にdispatchして
  • UI Threadでmessageに設定されたcallback(HandlerでpostしたRunnable)が実行される

別スレッド作って、HandlerにRunnable渡すって時点ですごい冗長。これは、もっとフレームワーク側で隠蔽したいなぁ。Handlerなんてのが、ユーザーに見える必要全くないと思う。ここらは作ろう。

# と思ったら、既にクラスがあった。

AsyncTask

http://github.com/android/platform_frameworks_base/blob/4ea496ddcaad107dda890850933423137582ce40/core/java/android/os/AsyncTask.java

やってることは上と同じ。上のクラス内のInternalHandlerを読めば、Hookpointがどう動くかわかる。

 |