PhoneGapで、AdMobプラグインを使っているが、Android2.xでは、上手く動かない。createBannerViewで、コールバックが成功、失敗いずれにも返ってこない。Android4.xでは、上手く動いている。
Android Virtual Devicesのエミュレータを使っていておかしかったのですが、実機を使ったら上手く動いてしまった。もしかしてエミュレータがおかしいのか?
AdMobプラグインを調べてみたら、処理用のスレッドを起動して、処理が終わるのを同期を取ってまって、リターンしているが、この同期がうまくいってないようだ。
起動側は、ロックしているオブジェクトのwait()でまち、
synchronized (runnable) { cordova.getActivity().runOnUiThread(runnable); try { runnable.wait(); } catch (InterruptedException exception) { …
処理側は、notify()で終了を通知している。
… synchronized (this) { this.notify(); }
特に問題なさそうに見えるが、そもそも待つ必要あるのか。たぶん、最初のころは、コールバックをサポートしていなかったので、こういう作りになったのだと思うが、いまなら、wait()でまたずにリターンして、notify()の代わりにコールバックすればいいんじゃいのかな。
ということで、そのように変更してみたら、Android2.xのエミュレータでもちゃんと動いている。(と思う。)