我必须在onCreate中调用(admob)loadAd吗?

时间:2017-07-04 01:18:40

标签: java android multithreading crash admob

我试图在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扔进另一个线程?

1 个答案:

答案 0 :(得分:2)

好的,我解决了自己的问题。把这个放在后代,以防其他人需要这个解决方案。

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

所以,像这样包装这些调用是一件非常简单的事情:

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

...如果您需要调用同步操作,请添加您可能需要的任何帮助基础结构。