我正在尝试在Android应用中使用admob。非常简单的代码,直接取自示例。

@Override
public void onCreate(Bundle savedInstanceState)
{
...stuff...

    MobileAds.initialize(this, "{my id}");
    mInterstitialAd = new InterstitialAd(this);
    mInterstitialAd.setAdUnitId("{my ad unit id}");

    AdRequest aRequest;
    aRequest = new AdRequest.Builder().build();
    mInterstitialAd.loadAd(aRequest);
}

...而且效果很好。

但是:我不要在这里使用此代码。我希望它可以在其他地方明确表示“初始化广告”。

当我这样做时,loadAd每次都会崩溃。我唯一可以成功调用的地方是OnCreate或OnCreate中定义的回调中。这是真实的东西,还是一些线程问题?是因为loadAd阻止了UI线程或类似事件导致游戏崩溃?

我不太擅长Java(我是c++人)...如果那是问题,我如何将整个shebang放入另一个线程?

最佳答案

好吧,我解决了自己的问题。万一其他人需要此解决方案,请放在此处以供后代参考。

loadAd和showAd必须在UI线程中发生。如果您在另一个线程中调用它们,那就是崩溃。

因此,像这样包装这些调用是非常简单的事情:

    runOnUiThread(new Runnable()
    {
        @Override
        public void run()
        {
            AdRequest aRequest;
            aRequest = new AdRequest.Builder().build();
            mInterstitialAd.loadAd(aRequest);
        }
    });

...并添加您可能需要的任何帮助程序基础结构(如果您需要该调用来同步操作)。

10-05 23:27