我试图在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扔进另一个线程?
答案 0 :(得分:2)
好的,我解决了自己的问题。把这个放在后代,以防其他人需要这个解决方案。
loadAd和showAd必须发生在UI线程中。如果你在另一个线程中调用它们,那就是崩溃。
所以,像这样包装这些调用是一件非常简单的事情:
runOnUiThread(new Runnable()
{
@Override
public void run()
{
AdRequest aRequest;
aRequest = new AdRequest.Builder().build();
mInterstitialAd.loadAd(aRequest);
}
});
...如果您需要调用同步操作,请添加您可能需要的任何帮助基础结构。