エミュレータがおかしい?

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のエミュレータでもちゃんと動いている。(と思う。)

カテゴリー: 開発環境