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

时间:2013-06-25 20:51:55

标签: android multithreading android-asynctask handler

我想在后台线程上加载我的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());

3 个答案:

答案 0 :(得分:10)

这可以通过runOnUiThread

加载用户界面广告上的广告来实现

onCreate()

拨打此电话
    Thread adThread = new Thread()
    {
        @Override
        public void run()
        {
            loadAd();
        }
    };
    adThread.start();

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);
        }
    });
}

答案 1 :(得分:4)

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

答案 2 :(得分:3)

我不相信这可以做到,因为所有UI相关的东西都必须在主线程上完成。 API可能已经有一个线程来获取网络上的广告。如果它没有android会抛出NetworkOnMainThreadException如果在主线程上完成任何网络相关的东西