Android AdMob由不同的Thread控制

时间:2014-03-03 12:15:14

标签: android multithreading canvas admob

我正在为Android手机开发游戏。我想将Google AdMob广告整合到其中,但要让用户尽可能轻松。基本上,我想只在游戏暂停时显示广告(我的意思是游戏暂停)

我在主要活动

中创建了添加
adView = new AdView(this, AdSize.BANNER, "xxxxxxxxxxxx");

然后我开始一个新的Thread,它继续在画布上绘图。在游戏暂停(或游戏结束)时,我试图显示广告(这是在新创建的线程内)

adView.setVisibility(AdView.VISIBLE);

但我得到以下异常

android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views

我正在使用GoogleAdMobAdsSdk-6.4.1

谢谢!

1 个答案:

答案 0 :(得分:4)

您只能从UI线程访问,请使用:

Runnable runnable = new Runnable() {
    @Override
    public void run() {
        adView.setVisibility(AdView.VISIBLE);
    }
}
runOnUiThread(runnable);

或者使用Handler

Handler handler = new Handler() {
    public void handleMessage(android.os.Message msg) {
        adView.setVisibility(AdView.VISIBLE);
    };
};

你可以在UI线程中执行此操作:

h.sendEmptyMessage(i);

i - 您可以传递给处理程序的任何值都可以是0。

编辑: 传递给处理程序(i)的值可以从字段msg.what

中检索