2013-06-19 4 views
0

Если у меня есть AsyncTask, работающая на неопределенный срок, и Android решает, что ей нужно убить задачу либо для освобождения памяти, либо из-за того, что устройство переходит в спящий режим (пользователь нажимает кнопку питания), есть ли каким-то образом в AsyncTask получить уведомление от ОС о том, что он вот-вот будет убит, чтобы можно было предпринять какие-либо действия для выполнения любой задачи?Обнаруживает, когда Android убивает AsyncTask

+0

Это не отвечает на мой вопрос. Мой вопрос заключается не в длительности операций. Речь идет об обнаружении убийства нити. – AndroidDev

+0

Вы не можете обнаружить убийство потока, возможно, этот обратный вызов будет полезен: '' 'Application.onLowMemory()' '' –

+0

Как насчет использования AsyncClass.isCancelled() - возвращает true, если эта задача была отменена до ее завершения ИЛИ AsyncClass.cancel (boolean) - пытается отменить выполнение этой задачи? – AndiM

ответ

1

Чтобы дать вам краткий ответ:

AsyncTask живет до тех пор, как процесс он привязан к жизни. ОС никогда не будет убивать AsyncTask, если ее процесс все еще работает (даже в фоновом режиме).

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

EDIT Вы должны вызвать isCancelled() внутри doInBackground() метод для того, чтобы убедиться в том, что, когда AsyncTask разрушается ОС, doInBackground заканчивается так, что метод onCancelled() выполняется.

Итак, чтобы подвести итог: в методе doInBackground всегда проверяйте функцию isCancelled boolean. Если он вернет true, вернитесь из doInBackground. Автоматически функция onCancelled будет выполнена вместо onPostExecute. Там вы можете поместить код, который хотите выполнить до его смерти.

+1

Я не верю, что это правда. ОС, безусловно, убьет все, что она сочтет необходимыми, даже переднего плана в суровых условиях. Если ОС способна убить службу переднего плана, то, разумеется, не стоит дважды думать об уничтожении AsyncTask. – AndroidDev

+0

В «суровых условиях» он убьет весь процесс. Он не может убить только AsyncTask. –

+0

Также вы должны хранить ссылку на AsyncTask и проверять ее, когда вам нужно знать, жив ли она. –

Смежные вопросы