【问题标题】:admob not running in game loopadmob 没有在游戏循环中运行
【发布时间】:2015-03-03 20:47:00
【问题描述】:

好吧,我正在制作一个有点像小鸟的小游戏,因为起始页、主游戏和游戏结束屏幕都在我的主游戏循环中:gameState == 0(起始页),gameState == 1(主游戏),gameState == 2(游戏结束屏幕)一切正常,但我遇到的问题是,当我尝试从 admob 加载广告时,它失败了即使广告请求是从我的主要活动中调用的,并且包含我的游戏循环的客户 SurfaceView 也在其自己的单独线程中运行,循环仍在运行

主要活动类

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    adView = new AdView(this);
    adView.setAdUnitId(unitId_Banner);
    adView.setAdSize(AdSize.SMART_BANNER);

    sView = new SView(this, this.getResources());

    RelativeLayout mainLayout = new RelativeLayout(this);

    RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

    mainLayout.addView(sView);
    mainLayout.addView(adView, adParams); 
    adView.bringToFront(); 

    setContentView(mainLayout); 
    adView.setVisibility(View.VISIBLE);
    adView.loadAd(new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).build());
}

游戏循环类

public void run(){
    while(running){
        if(!holder.getSurface().isValid()){
            continue;
        }
        canvas = null;
        try{
            canvas = holder.lockCanvas();
            synchronized(holder){
                startTime = System.currentTimeMillis();
                framesSkipped = 0;
                update();
                draw(canvas);

                timeDiff = System.currentTimeMillis() - startTime;
                sleepTime = (int)(FRAME_PERIOD - timeDiff);

                if(sleepTime > 0){
                    try{
                        Thread.sleep(sleepTime);   
                    }catch(InterruptedException e){}
                }
                while(sleepTime < 0 && framesSkipped < MAX_FRAME_SKIPS){
                    update();
                    sleepTime += FRAME_PERIOD; 
                    framesSkipped++;
                }
            }
        }finally{
            if(canvas != null){
                holder.unlockCanvasAndPost(canvas);
            }
        }   
    }
}

如果我要删除 gameloop 运行方法中的 while 循环,广告加载正常,谁能帮我恳求

03-04 02:47:30.997: I/Ads(277): Starting ad request.
03-04 02:47:58.218: W/Ads(277): There was a problem getting an ad response. ErrorCode: 0
03-04 02:47:58.227: W/Ads(277): Failed to load ad: 0

【问题讨论】:

  • 试试这个,让 setContentView(mainLayout); 成为你的 onCreate 方法中的最后一个函数。或者 adview 函数可能是你在 super.onCreate 之后 oncreate 的第一行
  • 什么是失败 - 显示你的 logcat
  • 嘿 elitz 试过了,但没有任何其他建议
  • william 你去吧,希望对你有帮助

标签: java android admob surfaceview


【解决方案1】:

最终不得不使用.tread wait() 直到广告加载仍然不是 100% 满意,但它可以工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多