2015年11月27日金曜日

Android Framework Code Readingな勉強会に行ってきた。

表題の通りです。昨日勉強会にいってきました。

https://mandroidfcr.doorkeeper.jp/events/33925
みんなでAndroidFrameworkをもくもくと読んで最後に何やったか報告しようーみたいな感じでした。

自分のテーマ


なんでActivity.onKeyDown/UpにDPAD_CENTER来ないんじゃワレ問題
(ちょうどその日の業務でドハマリしたので。本当はRecyclerViewとか見たかったんだけどなー)

内容

Activityを読んで見る。
http://tools.oesf.biz/android-6.0.0_r1.0/xref/frameworks/base/core/java/android/app/Activity.java#2714
onKeyDown/Upに関してはその前にdispatchKeyEvent()を経由してくるので、そこを読む。

decorViewって何
http://stackoverflow.com/questions/23276847/what-is-an-android-decorview”The DecorView is the view that actually holds the window’s background drawable.”
要するに大元の、Window全体のViewってことか?

  2730         return event.dispatch(this, decor != null
   2731                 ? decor.getKeyDispatcherState() : null, this);
   2732     }
return がevent.dispatch()なのでKeyEvent.dispatch()を読んでみる


public final boolean dispatch(Callback receiverDispatcherState stateObject target) {
http://tools.oesf.biz/android-6.0.0_r1.0/xref/frameworks/base/core/java/android/view/KeyEvent.java#2633ここでActionごとにCallbackとして設定しているActivity.thisのonKeyDownとかUpとかを呼び出している
ちなみにonKeyDownでActivity.onKeyDownの戻り値をtrueにするとstate.startTrackingにする。downのときにtrueにするとstaticクラスのstateのtrackingに登録されるっぽい。
→今trackingしているものは何かを取得すると一意で返ってくるのはそのせい。

とりあえずActivityのonKeyDownを見ようかな…と思ったけどDPAD_CENTERが名指しで使われている箇所をあたってみようかな、と思ってみる。

DPAD_CENTERが呼ばれている箇所を見てみる。

これが意外と少なくてよかった。

Activityの方にあるのはコメントアウトされているしStartActivitiyForResult関係っぽいから違いそう。なのでとりあえず無視。
そしてView.onKeyDown/onKeyUpになんかいろいろコメント書いてある かなりそれっぽいけどコードにはいない→なんか怪しいKeyEvent.isFonfirmKey()ってメソッドいる
http://tools.oesf.biz/android-6.0.0_r1.0/xref/frameworks/base/core/java/android/view/KeyEvent.java#1753KeyEvent.isConfirmKey()でDPAD_CENTERまたはENTERの場合にtrueで返している!!
つまりはDPAD_CENTERまたはENTERのときにごにょごにょごにょとしているわけだ。
多分ここでDPAD_CENTERの処理を行っているから、Activityの方に伝わらなかった…?というところで時間切れ。
まぁ1時間くらいだったから仕方ないね…。

わかんなかったこと


ActivityからViewにどうやっていってるんだろうということ。
(ちょっと今ざっと見てもわからなかったので今後の課題にしたいorz)

感想


rebuild.fmがBGMだったのですが、最初は結構耳に入ってきてちょっと集中できなかった。。
途中から気にならなくなってきたが、更に途中でアニメの話になってうっかりと聞きこんでしまった。
私はシュタゲ見てないし、まど☆マギのTV版のラストはハッピーエンドではないがバッドエンドというほどでもないと思います。叛逆はどう考えても最高にバッドエンド。あの終わり方大好き。

主催の方がメルカリの方らしく、また会場もメルカリだったため、メルカリの会社見学させてもらえた。洒落たオフィスや…なんだこの洒落っぷりは…



みんなが気になるなーと思う場所のコードを読んでいるから、結構見ている箇所が多岐に渡っていて、
へーみんなそういうところが気になるんだーとか、そういうきっかけで調べ始めるのかーとか、そういった別の視点があったなと思った。ホーム画面のPagerとか気にしたことがなかったので、そういった気づきもあった。

なかなかじっくりと、ただFrameworkのコードを読むという時間って取れないので、結構貴重な時間だったと思う。
どうしても会社にいる時間は業務でわたわたしてしまうし、プライベートでコード書くときもがりがりと書いてしまうので、もっと他の人のコード読んだほうがいいのかなーとは思った。
ぜひ、次回もあったら参加したい勉強会でした。

0 件のコメント:

コメントを投稿