Async выполняет блок пользовательского интерфейса потока? - PullRequest
0 голосов
/ 10 декабря 2018

Я использую

AsyncTask.execute(() -> {...} 

в своем приложении и заметил, что этот метод блокирует поток пользовательского интерфейса.У меня есть некоторый код в теле execute, который выполняет некоторые вычисления, которые занимают от 5 до 8 секунд, а затем возвращает результат в пользовательский интерфейс через runOnUiThread.Но похоже, что когда я вызываю метод, в котором есть Async.execute (..).Пользовательский интерфейс заблокирован от добавления других элементов до тех пор, пока этот элемент не завершит свои вычисления и не вернет результат в пользовательский интерфейс.

Также в состоянии документации для Android:

Этот метод должен вызываться изосновной поток вашего приложения.

( Ссылка на документы )

, поэтому мой вопрос: асинхронное выполнение блокирует поток пользовательского интерфейса?мои наблюдения верны.

спасибо

РЕДАКТИРОВАТЬ

Я использую эту библиотеку для очистки данных TMDB

 AsyncTask.execute(() -> {

            TmdbTvSeasons tmdbTvSeasons = new TmdbApi(apiKey).getTvSeasons();
            TvSeason season = tmdbTvSeasons.getSeason(
                    tmdbShowId,
                    seasonNumber,
                    "en",
                    TmdbTvSeasons.SeasonMethod.videos);

            listener.tvSeasonReceived(season);

        });

Мой слушатель затем передает результат в пользовательский интерфейс для обновления представления переработчика:

 tListener = t -> {
                tArray.add(t)
                jobHandler = new Handler(Looper.getMainLooper());
                jobHandler.post(() ->
                        adapter.notifyItemInserted(tArray.size() - 1));
            };

1 Ответ

0 голосов
/ 10 декабря 2018

AsyncTask.execute выполняется в потоке AsyncTask.Пока вы не вызываете .get () (что вы никогда не должны делать), он асинхронный.Однако вам не нужно использовать runOnUiThread или отправлять с ним обработчик - весь смысл AsyncTask заключается в том, что onPostExecute выполняется в потоке пользовательского интерфейса, в противном случае вы просто используете поток.

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