Как избежать Admob блокирования потока пользовательского интерфейса

Я обнаружил, что некоторые из моих действий заблокированы при запуске. Поэтому я написал этот код в новом проекте:

public class LayoutTestActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        long now = System.currentTimeMillis();

        new AdView(this, AdSize.BANNER, "MY_ID");

        Log.e("Admob Test","The UI was blocked "+(System.currentTimeMillis()-now)+"ms");
    }
}

В результате первое создание объекта AdView блокирует поток пользовательского интерфейса на 1-2 секунды.

Есть ли способ избежать этого?

Спасибо

Ответы на вопрос(3)

Использовать темы:

public class LayoutTestActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    long now = System.currentTimeMillis();

    new Thread(new Runnable() {

        public void run() {
            new AdView(this, AdSize.BANNER, "MY_ID");               
        }
    }).start();

    Log.e("Admob Test","The UI was blocked "+(System.currentTimeMillis()-now)+"ms");
}
 Addev27 февр. 2012 г., 22:49
Ваш код требует подготовки Looper, но да, это более легкое решение. В любом случае любопытно, что продукт Google блокирует пользовательский интерфейс так много времени

отложив рекламный запрос на 1 секунду (что дает время дляAdView загружать, а не блокировать пользовательский интерфейс.

        new Timer().schedule(new TimerTask()
        {
            @Override
            public void run()
            {
                MainActivity.runOnUiThread(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        AdRequest adRequest = new AdRequest.Builder()
                                .addTestDevice(AD_TEST_DEVICE)
                                .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                                .build();

                        adView.loadAd(adRequest);
                    }
                });
            }
        }, 1000);
Решение Вопроса

который является причиной для блокировки. Пока происходит инициализация AdView, поток больше ничего не будет делать.

Вы можете попробовать загрузить AdView в другой поток или использовать AsyncTask, чтобы загрузить его безопасным способом.

Проверьте это для получения дополнительной информации об AsyncTask и Threading в Android.

http://developer.android.com/reference/android/os/AsyncTask.html

 codingpuss20 дек. 2015 г., 08:52
Вы не можете вызвать loadAd в AsyncTask

Ваш ответ на вопрос