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
Android: несколько действий в представлении списка – проблема с фокусом Цель Android для готовности SDK Локализация имени пользователя в приложении Android для разных локалей Как захватить содержимое экрана устройства Android? GetOutputMediaFile (int) не определено для типа new Camera.PictureCallback () {} ошибка, запутывающая меня Возможно ли отсроченное рендеринг / затенение с OpenGL ES 2.0? Android: определить яркость (количество света) в окружении телефона с помощью камеры? Как сделать прокручиваемый TableLayout? Когда использовать Android PopupWindow vs Dialog Менеджер сети GCM потерял работу Изменение активности в AppCompatActivity использует больше оперативной памяти? Как настроить эмулятор Android 4.0+ для работы в качестве планшета? Как изменить цвет значка, который находится внутри edittext? Формат EditText для валюты с целыми числами ParseFile.cancel () не работает – файл продолжает загружаться