Подтвердить что ты не робот

Если активность убита, работает ли AsyncTask?

Я думаю, что знаю ответ на этот вопрос, но продолжает ли AsyncTask жить, как только его вызывающая активность была finish() ed?

    protected void onPreExecute() {
        Toast.makeText(getApplicationContext(), "Your data is processing.", Toast.LENGTH_LONG);
        finish();
    }

Изменить: до сих пор два разных ответа:)

4b9b3361

Ответ 1

AsyncTask привязан к потоку пользовательского интерфейса, и если операция завершена, задача async отменяется.

[обновление] - комментарий Hackbod ниже верен. Следует отметить, что AsyncTasks рассчитаны на недолговечность и поэтому не беспокоится об этой проблеме. AsycTask действительно исчезнет, ​​когда он будет завершен ИЛИ процесс будет убит, что может произойти или не произойти после того, как вызывается окончание.

Ответ 2

Он продолжает работать до завершения onPostExecute.

Ответ 3

У меня возникла какая-то странность в Async Tasks, где, если активность убита операционной системой и когда приложение возобновляется, AsyncTasks иногда вообще не запускается. Я не уверен, почему они попадают в это состояние. Если вы выполняете свои AsyncTasks в своем потоке исполнителей, этого не происходит. Я могу столкнуться с каким-то странным обстоятельством. Думал, что было бы полезно разместить здесь все равно:).

Ответ 4

Задача Async продолжает выполняться до тех пор, пока он не закончит работу onPostExecute().

попробуйте, поставив тост на финиш() и onPostExecute(), чтобы увидеть, какой тост показан первым.

Ответ 5

Asynctask не ограничены каким-либо жизненным циклом действия или службы.

Он продолжает работать в отдельном потоке, пока onPostExecute() не будет выполнен в основном потоке.

Ответ 6

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

Вместо этого следует использовать службы для длительных операций.