2013-11-30 4 views
0

У меня есть активность (скажем, Avtivity A), которая запускает асинкатск и отображает некоторые результаты, которые отображаются в другой активности (Activity B). Все работает нормально. Когда пользователь нажимает кнопку, задача тригера, а другая активность (активность B) отображается с индикатором выполнения. Если я нажмем кнопку «Назад» в действии B (пока индикатор выполнения все еще отображается), я перехожу к Activity A. Но через некоторое время (когда задача завершена) Activity B становится видимым.Как остановить asynctask в android при нажатии кнопки «Назад»

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

Пожалуйста, помогите мне, и спасибо за вашу помощь

+0

Опубликовать свой метод AsyncTask onPostExecute() –

+0

** «Я хочу остановить асинктузу (связанную с Activity A), когда пользователь нажимает кнопку« Назад »в действии B.» ** Не делайте этого. Вместо двух видов деятельности используется одно действие с двумя фрагментами. Используйте первый фрагмент, чтобы запустить AsyncTask (контролируемый Activity), и когда он начнет заменять первый фрагмент вторым в пределах одного действия. – Squonk

ответ

3
MyAsyncTask myTask=null; 
myTask = new MyAsyncTask(); 

для выполнения задачи

myTask.execute(); 

для остановки/отменить задание

public void onBackPressed() 
{ 

    myTask.cancel(true); 
} 
+0

Спасибо за информацию. Но могу ли я вызвать этот метод отмены из Activity B. Асинхронность, которую я хочу отменить, - это действие A? –

+0

есть u жестяная банка. Вы можете создать объект этого класса в Activity B и использовать как хотите ... Я уже опубликовал свой код для отмены задачи ... –

+0

Спасибо за это. Просто для уточнения. Мне нужно создать объект для Activity A или для асинтезы в Activity A? Можете ли вы дать мне пример кода, пожалуйста, –

1

При отображении результатов и ProgressBar и обрабатывать Отменять в деятельности B, то вы, вероятно, следует начать AsyncTask в деятельности В. Но я предлагаю вам подождать, пока AsyncTask не закончится и затем запуск Activity B с данными в комплекте. В любом случае вы обрабатываете все связанные с AsyncTask вещи в одном действии. Старайтесь не переливать все. Просто реализовать некоторые OnAsyncTaskFinishedListener(), как:

в классе AsyncTask:

public interface OnMyAsyncTaskCompletedListener { 
    void onMyAsyncTaskCompletedListener(MyResults results); 
} 

. , ,

@Override 
protected void onPostExecute(MyResults results) { 
    onMyAsyncTaskCompletedListener(results); 
} 

@Override 
protected void onCancelled() { 
    onMyAsyncTaskCompletedListener(null); 
} 

Затем в деятельности вы реализуете OnMyAsyncTaskCompletedListener и

public void onServerRequestCompleted(MyResults results) { 
    //Start activity passing results in Intent 
} 

Наконец, чтобы отменить выполняющееся действие вы чего-л, как:

@Override 
public void onBackPressed() { 
    mMyAsyncTask.cancel(true); 
} 
0

В активность onDestroy() метод B «s вы следует позвонить asynTask.cancel(true).

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