Как правильно использовать AsyncTask во время SyncAdapter onPerformSync

StackOverflow https://stackoverflow.com/questions/8890841

  •  29-10-2019
  •  | 
  •  

Вопрос

Я получаю большое количество отчетов об ошибках от пользователей, о которых сообщают в диалоговых окнах принудительного закрытия, в которых указывается что-то вроде следующего:

общий

Теперь я пытался понять, как мне лучше всего решить эту проблему.Внутри моей реализации onPerformSync я создаю ряд AsyncTasks и выполняю их.Я подозреваю, что моя проблема в том, что я не жду завершения этих задач, прежде чем вернуться из onPerformSync.Я пытался сделать следующее:

общий

Затем я установил счетчик, и когда этот счетчик уменьшится до нуля, вызову Looper.myLooper (). quit () внутри обратного вызова из асинхронных задач.

Но это приводит к еще большему сбою моего приложения со следующей ошибкой времени выполнения:

общий

Есть идеи, как правильно выполнить синхронизацию?

Это было полезно?

Решение

Я знаю, что этот пост старый, но что насчет того, чтобы не вызывать looper.quit () в основном потоке, если кто-то сталкивается с ним?Следующее работает для меня из службы SyncAdpater, порождающей несколько AsyncTasks, хотя могут быть и другие причины не делать этого с точки зрения производительности ...

родовое слово

Другие советы

Вообще-то нельзя.AsyncTask использует основной поток пользовательского интерфейса и полагается на Handler и Looper, которых там нет.Используйте чистую реализацию Thread, AsyncTask следует использовать только в действиях.

Ответ abloc решает проблему, но проблема с этим решением заключается в зависании пользовательского интерфейса, эта проблема присутствует в Android 2.2 и Android 2.3.Уловка, которую я обнаружил, состояла в том, чтобы вызвать конструктор AsyncTask в моем классе SyncAdapter и использовать Looper.prepare():

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top