【问题标题】:Separation of Interstitial load from UI thread将 Interstitial 负载与 UI 线程分离
【发布时间】:2025-12-25 14:10:07
【问题描述】:

我创建了一个简单的安卓游戏并决定放置插页式广告。我的代码(我使用的是 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()

总是返回假。

可能是什么原因?

【问题讨论】:

    标签: android multithreading admob interstitial mopub


    【解决方案1】:

    我不确定,但我认为您是在线程完成加载工作之前检查 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);
    
                    }
    

    【讨论】:

    • 没有。实际上,线程有足够的时间来加载所需的广告(插页式广告会在调用加载函数的至少 10 秒后显示,这已经足够了)。