我们在andengine编码的基于关卡的游戏中使用了admob插页式广告。 第一次加载游戏时,广告会正确显示。但是,我们希望在每个级别后显示广告。当第二次调用广告时,即在场景上的级别上,它给出错误。我们使用以下代码。
"interstitial = new InterstitialAd(this, "123456789");
adRequest = new AdRequest();
interstitial.loadAd(adRequest);
interstitial.setAdListener(ShootBalloonMainActivity.this);"
这是错误:无法在未调用Looper.prepare()的线程内创建处理程序
我们得出的结论是,当广告第二次显示时,主线程没有暂停,这种情况正在发生。所以两个线程同时运行,抛出错误。 是这样的吗?如果是这样,我们如何暂停主线程?
答案 0 :(得分:1)
我的方式:
在MainActivity中添加此内容
public void removeAd() {
LinearLayout layoutBottom = (LinearLayout) findViewById(R.id.bottom);
layoutBottom.removeAllViews();
}
private void attachAd(LinearLayout layout) {
AdWhirlLayout adWhirlLayout = new AdWhirlLayout(this, Constants.adwhirlId);
layout.addView(adWhirlLayout);
}
public void showBottomAd() {
removeAd();
LinearLayout layout = (LinearLayout) findViewById(R.id.bottom);
attachAd(layout);
}
在你的每一个场景中:
GameActivity.gameActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
GameActivity.gameActivity.showBottomAd();
}
}) ;
答案 1 :(得分:0)
一些事情:
1)分开构建插页式广告以加载广告。您应该只构建一次,您应该在每个级别之后加载(并显示)广告。
2)无法在未调用Looper.prepare()的线程内创建处理程序,这意味着需要从主UI线程调用生成此消息的代码(或者已通过调用Looper.prepare()配置为此类的线程。这听起来像是第二次尝试展示广告(或者可能是构建
)答案 2 :(得分:0)
当你从一个场景移动到另一个场景时,首先你必须删除之前的“adRequest”实例然后添加新的实例。当你调用每个场景时,将这段代码放在“UIthread”中。它会起作用。