我正在尝试在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);
}
});
...并添加您可能需要的任何帮助程序基础结构(如果您需要该调用来同步操作)。