「まったりAndroid Framework Code Reading #2」に参加してきた

このエントリーをはてなブックマークに追加

ちょっと前の話ですが、まったりAndroid Framework Code Reading #2というもくもくコード読む会に行ってきました。
個々人でテーマ決めて、最後に成果を報告しあう感じ。

テーマ

私は、 WindowManager を読んでみることにした。最近公開したアプリが他のアプリにの上にオーバーレイするタイプのモノで、 WindowManager をちょっと触ったからだ。

成果

WindowManager のコード自体はすぐに見つかった。

android.view.WindowManager.javaがインターフェイスで、実態は android.view.WindowManagerImpl.java こっちのようだ。

ただ、基本的に処理は全て android.view.WindowManagerGlobal.java に委譲しているらしく、大した処理は書いてなかった。

ここでちょっと興味がずれて、 getApplicationContext().getSystemService(Context.WINDOW_SERVICE) を呼ぶとどんな感じで WindowManager が渡されるのか調べ始めた。

context.getSystemService(Context.WINDOW_SERVICE) を呼ぶと、android.app.SystemServiceRegistry.java から WindowManagerImpl.java が返される。どこからSystemServiceRegistryを呼んでるかはちょっと追えていない。

WindowManagerViewManager を継承している。
で、ViewManager には ViewManager#addViewBadTokenExceptionInvalidDisplayException を投げる、って書いてあるけどそれらのExceptionは WindowManager に定義してある。
親interfaceのViewManagerに定義するか独立したクラスとして定義したほうがいいんじゃ? って気もしたけどどうなんでしょうね。

感想

Frameworkのコードを読む機会ってあまりないので、(時間は圧倒的に足りないにしても)とても良い機会だった。今回はあまり役立ちそうな知見は得られなかったけど、OS標準アプリのコードとかRecyclerViewとか、いろいろ読んでみたいコードができた。(WindowManagerも中途半端なのでなんとかしたい…)
次回以降もタイミングがあったら参加したい、と思える会でした。

こちらからは以上です。