DoInBackground от AsyncTask запускает свое выполнение слишком поздно после вызова AsyncTask :: execute

Я написал AsyncTask, и большую часть времени между его конструктором не было задержки, и вызывалась его doInBackground (задержка 0 мс). Но когда синхронизация контактов происходит на заднем плане, я часто испытываю задержку в 1-3 секунды между моим конструктором AsyncTasks и doInBackground. Эта задержка неприемлема в моих обстоятельствах. Я понимаю, что AsyncTask является фоновым потоком, и эту проблему можно решить, используя Thread и установив приоритет выше. Но я хочу узнать, как узнать, что вызывает вызов doInBackground моей AsyncTask? Я использовал верхнюю оболочку adb top -m 10, и использование процесса кажется вполне нормальным, когда эта проблема возникла.

Любая помощь приветствуется.

благодаря

Я также сталкиваюсь с этим вопросом в течение длительного времени, но теперь он решен. Используйте приведенный ниже код

new AsyncTaskName().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 

Вместо этого код

 new AsyncTaskName().execute(); 

Это решило бы проблему запуска doInbackground поздно.

Мы вообще не беспокоимся о планировании задач с помощью jvm. И нам не нужно беспокоиться.

Если что-то нужно сделать как можно быстрее в вашем приложении, сделайте это в самом конструкторе или используйте onPre of Asynctask (помните, что он выполняется в потоке пользовательского интерфейса).

Но я согласен, что есть что-то подозрительное в doInBackgroud, вызывающем в Android AsyncTask. Я сам был свидетелем того, как doInbackground не получил вызов после onPre. Вы также можете использовать это в Google. Многие люди столкнулись с этим. Я перешел к использованию традиционной темы.

Я написал свою собственную Asynctask, используя традиционный поток в ядре, и чтобы имитировать onPre и onPost, я использовал Handler. Вы можете пойти и на этот вариант.

Важно различать создание и выполнение задачи. ( ASyncTask имеет отдельный метод execute() , а также конструктор, как вы заметили.)

Создание потока потенциально довольно дорого, поэтому вы можете обнаружить, что создание задачи заранее, а затем только выполнение ее в нужное время дает лучшие результаты.

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

Intereting Posts
Маркер карты Google заменяется ограничивающим прямоугольником при масштабировании Восстановить ActionMode после изменения ориентации Утилита Google Maps: как получить все маркеры от ClusterManager <?>? Дизайн Android-приложений: Правильное разделение между действиями, службами и потоками? Круговой прогресс с кнопкой плавающего действия Какова семантика возвращаемого значения функций ведения журнала Android (например, Log.v ())? Как использовать libudev на android Загрузите файл через HTTP-форму через MultipartEntityBuilder с индикатором выполнения Использование Espresso 2.0 + Roboelectric в Android-проекте Android Как эмулировать поведение @android: id / empty в GridView? Потоковая передача голоса по tcp Проблемы с закладкой TabLayout библиотеки Android Пользовательская информация с картами google api v2 Как реализовать привязку в CollapsingToolbarLayout? Одноплатный однопользовательский вход в Google Plus: onConnected никогда не вызывается в новой установке