Intereting Posts
Изменение текстового значения в макете раздувания Вызов метода тестируемой активности из теста с использованием эспрессо и просмотр его результатов Android: inApp купить подтверждение валидации google play Использование одного и того же идентификатора для нескольких кнопок Что означают цветные пузыри в средстве просмотра иерархии? Как добавить внешние библиотеки jar в проект android из командной строки Фрагмент Рекурсивная запись в executePendingTransactions Ошибка Запустить приложение sms с намерением Как отменить handler.postDelayed? Альтернатива com.android.camera.action.CROP? Просмотреть getX () и getY () вернуть 0.0 после того, как они были добавлены в Activity Создание Android-библиотеки AAR, включая javadoc и источники Цвет панели навигации с леденец для Android Приложение загружает неправильные текстуры при открытии снова Создание базового PSD для разработки пользовательского интерфейса Android App для устройства mdpi, 320 / 480px

Как остановить поток asynctask в android?

Я хочу остановить поток AsyncTask из другого потока AsyncTask . Я попробовал как new AsyncTask.cancel(true) чтобы остановить фоновый процесс, но он не остановился.

Может ли кто-нибудь помочь мне в этом?

Solutions Collecting From Web of "Как остановить поток asynctask в android?"

Объявите свой asyncTask в своей деятельности:

 private YourAsyncTask mTask; 

Создайте его так:

 mTask = new YourAsyncTask().execute(); 

Убить / отменить его вот так:

 mTask.cancel(true); 

Причина, по которой вещи не останавливаются для вас, заключается в том, что процесс (doInBackground ()) выполняется до тех пор, пока он не будет завершен. Поэтому вы должны проверить, отменен ли поток или нет, прежде чем делать вещи:

 if(!isCancelled()){ // Do your stuff } 

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

Также было бы полезно «очистить» в

 onCancelled(); 

Документация для AsyncTask:

http://developer.android.com/reference/android/os/AsyncTask.html

Надеюсь это поможет!

Вы также можете использовать его в onPause или onDestroy жизненного цикла Activity :

 //you may call the cancel() method but if it is not handled in doInBackground() method if (loginTask != null && loginTask.getStatus() != AsyncTask.Status.FINISHED) loginTask.cancel(true); 

Где loginTask – объект вашей AsyncTask

Спасибо.

Вы не можете сразу убить асинтеску. Чтобы остановить это, вы должны сначала отменить его:

 task.cancel(true); 

И в методе doInBackground () asynctask проверьте, отменено ли оно:

 isCancelled() 

И если это так, прекратите выполнение его вручную.

У меня была аналогичная проблема – по сути, я получал NPE в async-задаче после того, как пользователь уничтожил фрагмент. После изучения проблемы с переполнением стека я принял следующее решение:

 volatile boolean running; public void onActivityCreated (Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); running=true; ... } public void onDestroy() { super.onDestroy(); running=false; ... } 

Затем я периодически проверяю «if running» в моем асинхронном коде. Я испытал это, и теперь я не могу «сломать» свою деятельность. Это прекрасно работает и имеет то преимущество, что оно проще, чем некоторые из решений, которые я видел на SO.

U может проверить onCancelled () один раз:

Защищенный объект doInBackground (Object … x) {

 while (/* condition */) { if (isCancelled()) break; } return null; 

}