在后台主题上加载广告(adMob)

The*_*ter 7 multithreading android handler android-asynctask

我想在后台线程上加载我的add,因为它SlidingMenu在打开和关闭时会产生延迟.我应该使用Thread/ Handler?还是AsyncTask

String MY_AD_UNIT_ID = "----";
AdView adView = new AdView(getActivity(), AdSize.BANNER, MY_AD_UNIT_ID);
final LinearLayout adLayout = (LinearLayout) getActivity()
            .findViewById(R.id.adLayout);
adLayout.addView(adView);
adView.loadAd(new AdRequest());
Run Code Online (Sandbox Code Playgroud)

zac*_*rav 10

这可以通过在UI Thread上加载Ad来实现 runOnUiThread

从中调用此 onCreate()

    Thread adThread = new Thread()
    {
        @Override
        public void run()
        {
            loadAd();
        }
    };
    adThread.start();
Run Code Online (Sandbox Code Playgroud)

loadAd() 方法

private void loadAd()
{
    // Banner Ad
    final AdView adview = (AdView) this.findViewById(R.id.adview);

    // Request for ads
    final AdRequest adRequest = new AdRequest.Builder()
            // Time for test devices
            .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
            .addTestDevice("xxxxxxxxxxxxxxxxxxxxxxx")
            .addTestDevice("xxxxxxxxxxxxx")
            .build();

    // Load Ads on UI Thread
    runOnUiThread(new Runnable()
    {
        @Override
        public void run()
        {
            adview.loadAd(adRequest);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

  • 这有效,但我不确定它是否真的解决了有问题的问题。当它在 UI 上运行时,它仍然会导致其他 UI 元素滞后。 (2认同)
  • 只是对谷歌搜索的任何人的说明:我开始收到错误`执行未恢复的活动的停止:{<your.package.name>/com.google.android.gms.ads.AdActivity} ...` 使用时. (2认同)

rup*_*hka 6

您应该在加载广告之前使用MobileAds.initialize()方法。在那之后 loadAd 工作得更快

Initializes the Google Mobile Ads SDK.

Call this method as early as possible after the app launches to reduce latency on the session's first ad request.

If this method is not called, the first ad request automatically initializes the Google Mobile Ads SDK.
Run Code Online (Sandbox Code Playgroud)

  • 最好将链接中的相关信息也放在您的答案中,以便在链接有一天断开时答案仍然有用。 (2认同)

tyc*_*czj 3

我不相信这是可以完成的,因为所有与 UI 相关的事情都必须在主线程上完成。API 可能已经有一个线程来获取网络上的广告。如果没有的话,NetworkOnMainThreadException如果主线程上完成了任何与网络相关的事情, android会抛出一个异常