Что убивает Android Asynctask? [дублировать
-
29-09-2019 - |
Вопрос
Этот вопрос уже имеет ответ здесь:
- Нити асинктюз никогда не умирают 4 ответа
PrintStatustask анализирует содержимое почтового ящика Gmail в поисках различных предметов интереса к сообщению. Но для каждой печати создается новая асинкткасса (). Выполнить () в соответствии с отладчиком. Разве эти задачи не должны умереть на выходе? Они должны быть убиты вручную?
public class Controller extends Activity {
...
private boolean applyMenuChoice(MenuItem item) {
switch (item.getItemId()) {
case R.id.menuStatus:
new PrintStatusTask().execute();
...
class PrintStatusTask extends AsyncTask<Void, String, Void> {
@Override
protected Void doInBackground(Void... unused) {
...
return null;
}
@Override
protected void onPostExecute(Void unused) {
this.cancel(true);
}
}
}
Решение
Хорошо, ребята, мне жаль, но я должен сказать вам, что вы не правы. Asynctask (почти) никогда не убит. Вызов Asynctask.cancel не убьет задачу.
Цитируется из документации Asynctask
Задача может быть отменена в любое время, вызывая Cancel (Boolean). Вызывая этот метод приведет к тому, что последующие вызовы в isCancelled () вернуть true. После вызова этого метода, онкан (объект), вместо онпостксекции (объект) будет вызвана после возврата doinbackground (Object []). Чтобы убедиться, что задача была отменена как можно быстрее, вы всегда должны проверять возвратное значение ISCancelled () периодически из DoInbackground (Object []), если это возможно (например, внутри цикла).)
Чтение документов может быть полезным ... так что я подведу это вам подвести итог, но так как я уже ответил в другом посте, я отправляю вас на это: Как я могу установить асинхронные URL -соединения на Android?
Я дал обходной путь к вашей проблеме, и да, некоторое время, некоторые асинктюда убиты. Но я не рекомендую использовать их, они бесполезны. Но, поскольку ваши бегущие асинктюды должны показать статус «ожидания», если они сделаны с задачей. В противном случае ваша задача не сделана, и я никогда не слышал о некоторой ошибке adb Thread.
С уважением !
Другие советы
Если вы поддерживаете ссылку на задачу вокруг, вы можете позвонить в его cancel
метод отменить его. В противном случае они живут до тех пор, пока процесс вашего приложения делает или до тех пор, пока они не вернутся из doInBackground
и (если присутствует) onPostExecute
Функции.