AdMob no mostrará el banner hasta que se actualice o inicie sesión en google plus

Tengo un problema. Mi AdMob se ha configurado desde hace algún tiempo sin ningún problema, pero me di cuenta de que algo andaba mal. El anuncio se carga correctamente (veo el mensaje de ddms), pero no se muestra. Se mostrará después de la actualización periódica de 60 segundos o cuando abra el inicio de sesión en google plus. El problema ocurre solo con Google Play Services AdMob y no con AdMobSDK jar. Cambiaría a AdMob jar, sin embargo, estoy usando los servicios de juegos de Google Play para tablas de clasificación y logros.

Sospecho que el problema es con la vista que no se muestra, o la configuración incorrecta.

De nuevo, el anuncio se mostrará después de 60 segundos (junto con la actualización del anuncio) de espera, o cuando enciendo la pantalla de inicio de sesión para los servicios de Google Play.

Estoy agregando mi código, también debo mencionar que cambié al nuevo sitio web de AdMob y repito, ese problema no está ocurriendo si utilizo el archivo jar de AdMob (el anuncio se muestra en 2-3 segundos como de costumbre). He cortado el código de servicios de juegos de Google Play (no afectan este problema porque lo he intentado en mi otra aplicación sin ellos, y el problema sigue ahí).

Código de actividad principal:

public class MainActivity extends AndroidApplication {

public static enum AdsStatus {
    SHOW_ADS, HIDE_ADS;
}

protected RelativeLayout layout;

protected static AdView adMobView;

public static class InnerHandler extends Handler {
    WeakReference<MainActivity> mActivity;

    InnerHandler(MainActivityactivity) {
        mActivity = new WeakReference<MainActivity>(activity);
    }

    @Override
    public void handleMessage(final Message msg) {
        if(msg.obj instanceof AdsStatus) {
            switch((AdsStatus)msg.obj) {
                case SHOW_ADS:
                    mActivity.get().showAds();
                    break;
                case HIDE_ADS:
                    mActivity.get().hideAds();
                    break;
            }
        }
    }
}
protected Handler handler = new InnerHandler(this);

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Create the layout
    layout = new RelativeLayout(this);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

    // Create the libgdx View
    View gameView = initializeForView(new MainApplicationListener(), true);
    layout.addView(gameView);

    //Ad Mob
    final DisplayMetrics displayMetrics = MainActivity.this
            .getApplicationContext().getResources()
            .getDisplayMetrics();

    if (displayMetrics.widthPixels >= 800 && displayMetrics.heightPixels >= 480) {
        if(adMobView != null) {
            adMobView.destroy();
        }

        adMobView = new AdView(AirDance.this);
        adMobView.setAdUnitId(<MY_ID_IS_HERE>);
        adMobView.setAdSize(AdSize.SMART_BANNER);

        RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        adParams.addRule(RelativeLayout.CENTER_HORIZONTAL);

        AdRequest adRequest = new AdRequest.Builder()
                            .addTestDevice(<MY_DEVICE_IS_HERE>)
                            .build();
        adMobView.loadAd(adRequest);

        layout.addView(adMobView, adParams);
    }

    // Hook it all up
    setContentView(layout);
}

@Override
protected void onResume() {
    super.onResume();

    AppRater.applicationLaunched(this, analytics);

    if(adMobView != null) {
        adMobView.resume();
    }
}

@Override
protected void onPause() {
    super.onPause();

    if(adMobView != null) {
        adMobView.pause();
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();

    if(adMobView != null) {
        adMobView.destroy();
        adMobView = null;
    }
}

public void showAds() {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if(adMobView != null) {
                adMobView.setEnabled(true);
                adMobView.setVisibility(View.VISIBLE);
            }
        }
    });
}

public void hideAds() {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if(adMobView != null) {
                adMobView.setEnabled(false);
                adMobView.setVisibility(View.GONE);
            }
        }
    });
}
}

Y aquí está AndroidManifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="..."
    android:installLocation="auto"
    android:versionCode="16"
    android:versionName="1.2.6" >

    <uses-sdk
        android:minSdkVersion="9"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-feature android:name="android.hardware.screen.landscape"/>
    <uses-feature android:name="android.hardware.touchscreen.multitouch" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="MainActivity">

        <meta-data android:name="com.google.android.gms.games.APP_ID"
            android:value="@string/app_id" />

        <meta-data android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <activity
            android:name="...MainActivity"
            android:label="MainActivity"
            android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- adMob -->
        <activity android:name="com.google.android.gms.ads.AdActivity"
             android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
    </application>
</manifest>

EDITAR: está bien, así que el anuncio se vuelve visible después de bloquear y desbloquear la pantalla con la aplicación abierta, también puede hacer clic en el anuncio invisible

EDITAR: Está bien, creo que lo resolví. Acabo de recargar manualmente todo el diseño en el evento AddLoad. De todos modos, esto es solo una solución funcional, no explica por qué sucede con Google Play Services AdMob.

adMobView.setAdListener(new AdListener() {

    @Override
    public void onAdLoaded() {
        super.onAdLoaded();

        MainActivity.this.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                layout.requestLayout();
            }
        });
    }

});

Respuestas a la pregunta(5)

Su respuesta a la pregunta