А может и не произойти, если асинкТаски установлены в параллельный запуск. Хотя по умолчанию последовательный.Если останавливать в doInBackground, максимум, что может произойти, остановка очереди,
Урок 89. AsyncTask. Cancel – отменяем задачу в процессе выполнения
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 89. AsyncTask. Cancel – отменяем задачу в процессе
А если паузу делать с внешней стороны асинкТаска, а не непосредственно внутри него? Я так понимаю человек говорит о спонтанной паузе, а не о константе какой-то. Хотя в принципе можно сделать проверку всяких isInterrupted и прочее, но не всегда это будет возможно, особенно когда мы тянем данные с блокирующих методов, в этой ситуации нас так не остановить.
Re: Урок 89. AsyncTask. Cancel – отменяем задачу в процессе
Ребята, всем привет!
У меня есть три кнопки: Start, Cancel, Result
Если нажать их последовательно (запуск AsyncTask, его отмена и попытка получения результата), то получаю ошибку:
---
W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xb2e85288)
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not execute method for android:onClick
...
Caused by: java.lang.reflect.InvocationTargetException
...
Caused by: java.util.concurrent.CancellationException
---
т.е. при попытке получения результата методом get(), следует проверить isCancelled()
Тогда приложение не будет вылетать
У меня есть три кнопки: Start, Cancel, Result
Если нажать их последовательно (запуск AsyncTask, его отмена и попытка получения результата), то получаю ошибку:
---
W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xb2e85288)
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not execute method for android:onClick
...
Caused by: java.lang.reflect.InvocationTargetException
...
Caused by: java.util.concurrent.CancellationException
---
т.е. при попытке получения результата методом get(), следует проверить isCancelled()
Тогда приложение не будет вылетать
Re: Урок 89. AsyncTask. Cancel – отменяем задачу в процессе
метод скорее всего неправильно написан, я так понимаю в xml-файле он onclick, а в коде onClickNAVI писал(а):java.lang.IllegalStateException: Could not execute method for android:onClick
Re: Урок 89. AsyncTask. Cancel – отменяем задачу в процессе
Доброго времени суток.
Я написал класс AsyncTask, в нем есть Анимация Alpha.
Когда я запускаю Activity, анимация начинает проигрываться, далее я нажимаю кнопку выход из приложения на телефоне. Потом заново запускаю приложение и анимация уже не играет.
В onCreate я запускаю AsyncTask вот так:
Я засек время анимации, пусть это будет 30 секунд. Запускаю приложение проходит 5 секунд я выхожу из приложения. Захожу обратно, анимация уже не работает. Я жду оставшиеся 25 секунд, и она начинает работать с самого начала. Получается, что пока старая анимация в фоновом режиме не доиграет, новая не начинается. Получается при выходе из приложения мне не нужно убивать Activity, мне нужно убить AsyncTask. И приостановка AsyncTask в моем случае не поможет, т.к. если приостановить AsyncTask, то Activity при выходе все равно потеряется. А при возврате в приложение запустив приостановленный AsyncTask, он будет ссылаться на убитую Activity. Мне поможет только полная остановка AsyncTask при нажатии на кнопку "Назад" на телефоне.
Затем я воспользовался уроком 89 и решил остановить задачу. Я добавил действия для кнопки "Назад":
Затем в doInBackground добавил метод if (isCancelled()) return null;
Получается когда мы нажимаем кнопку "Назад", срабатывает метка delay.cancel(true); А потом в потоке doInBackground проверяется, если isCancelled равен true, то мы завершаем задачу. Но, не работает все равно. Что я делаю не так? Анимация не проигрывается второй раз, пока не пройдет 30 секунд, несмотря на то что я завершил задачу doInBackground.
Я написал класс AsyncTask, в нем есть Анимация Alpha.
Когда я запускаю Activity, анимация начинает проигрываться, далее я нажимаю кнопку выход из приложения на телефоне. Потом заново запускаю приложение и анимация уже не играет.
В onCreate я запускаю AsyncTask вот так:
Код: Выделить всё
Delay delay = new Delay();
delay.execute();
Код: Выделить всё
class Delay extends AsyncTask<Void, Integer, Void>{
@Override
protected Void doInBackground(Void... params) {
while (line <=2){
publishProgress(line++);
Thread.sleep(15000);
return null;
}
@Override
protected void onProgressUpdate (Integer... values){
final TextView textView1 = (TextView)findViewById(R.id.textView1);
final TextView textView2 = (TextView)findViewById(R.id.textView2);
final Animation a = AnimationUtils.loadAnimation(this, R.anim.alpha);
switch(line){
case 1: textView1.startAnimation(a);break;
case 2: textView2.startAnimation(a);break;
default: break;
}
}
Затем я воспользовался уроком 89 и решил остановить задачу. Я добавил действия для кнопки "Назад":
Код: Выделить всё
@Override
public void onBackPressed() {
Delay delay = new Delay();
delay.cancel(true);
finish();
}
Код: Выделить всё
@Override
protected Void doInBackground(Void... params) {
while (line <=22){
publishProgress(line++);
try{
Thread.sleep(5000);
if (isCancelled()) return null;
}catch(Exception e){}
}
return null;
}