将间隙负载与 UI 线程分离



我创建了一个简单的安卓游戏,并决定投放插页式广告。我的代码(我使用的是MoPub广告SDK,实现类似于admob):

private void loadMoPubInterstitial () {
    moPubInterstitialView.load();
}

我从主活动的 onCreate() 方法调用它。显示插页式广告,但它会导致 UI 线程负载过重。控制台显示警告,指出丢弃了大约 350 帧,并且应用程序在主线程上执行了太多工作。游戏在设备方面确实滞后。当我评论这行时

moPubInterstitialView.load();

警告已删除,游戏在设备上运行流畅。所以我决定将插页式加载过程移动到另一个线程。这是我的代码:

   private void loadMoPubInterstitial () {
    new Thread(new Runnable() {
        public void run() {
            moPubInterstitialView.load();
        }
    }).start();
}

但这一次,插页式广告没有显示。检查以确定插页式广告是否已准备就绪:

moPubInterstitialView.isReady()

始终返回假值。

可能是什么原因?

我不确定,但我认为您在线程完成加载工作之前正在检查 moPubInterstitialView,只需尝试检查 moPubInterstitialView.isReady() 一旦您的线程完成所有任务。我尝试了以下示例,它对我有用。

boolean flag= false;
                temptest ="before change" ;
              Thread thread= new Thread(new Runnable() {
                   @Override
                   public void run() {
                       temptest=" text changed";
                        flag= true;
                   }
               });
                thread.start();

                if(flag)
                {
                    System.out.println(temptest);
                }

最新更新