порядок действий при закрытии Сервиса - PullRequest
1 голос
/ 30 июня 2011

Я пишу Сервис, который использует AsyncTask для выполнения некоторых сетевых операций. Допустим, doInBackground AsyncTask занимает очень много времени, и пока это происходит, ресурсы истощаются, и операционная система закрывает Службу.

Когда AsyncTask будет убит? Будет ли AsyncTask все еще работать при вызове onDestroy, или это произойдет позже, или я отвечаю за выключение AsyncTask? Я пытаюсь убедиться, что у меня нет условий гонки между кодом в моем onDestroy и кодом в моем doInBackground.

1 Ответ

2 голосов
/ 07 июля 2011

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

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

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

...