Как избежать Admob блокирования потока пользовательского интерфейса - PullRequest
11 голосов
/ 28 февраля 2012

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

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 ]

4 голосов
/ 29 февраля 2016

У меня была похожая проблема. Решил его, отложив рекламный запрос на 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);
1 голос
/ 28 февраля 2012

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

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");
}
0 голосов
/ 28 февраля 2012

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...