Я считаю, что это вызывает проблемы. Если действие, которое создало AsyncTask
, больше не существует, возникает исключение, потому что родительский обработчик больше не существует. Правильный подход заключается в том, чтобы сохранить ссылку на AsyncTask
в этом упражнении и зафиксировать событие onPause()
. В случае паузы я отменил бы AsyncTask
и очистил бы, если есть что-то, что нужно очистить.
Чтобы ответить на ваш второй вопрос, все зависит от требований. Если требование для этой задачи все еще существует, тогда да, вы можете прикрепить AsyncTask
к приложению. Но, похоже, что здесь есть что-то не то. Вы сказали if Activity still is around
. Если вам не нужна задача после того, как действие исчезло, то вы можете также использовать мой оригинальный подход - отменить задачу и выбросить ее, когда действие приостановлено.
Кроме того, одно последнее замечание. Если вы сохраняете ссылку на действие даже после того, как действие прекращено, у вас будет утечка памяти , поскольку у этого действия все еще есть ссылка, которую невозможно очистить, пока задача не будет завершена.
Эта статья звучит похоже на то, что вы делаете. Если вы действительно хотите сохранить задачу, то это кажется хорошим решением. Я также обнаружил, что Контекст Android AsyncTask прекращен , который может вам помочь.