2015-02-27 2 views
-1

В настоящее время я использую этот код для выполнения задачи:AsyncTask навсегда петля в Android

AsyncTask<Object, Integer, Void> task = new Task(getApplicationContext(), this.findViewById(android.R.id.content)); 

task.execute(); 

Теперь я хотел бы повторить эту задачу навсегда в то время как цикл, когда задача закончена, я бы начать новую задачу. .

Как я могу продолжить?

Я знаю, как получить статус задания, которое я могу использовать: task.getStatus(); Но после?

+0

Вы уверены, что вам нужна AsyncTask, а не служба? – 2Dee

+0

Да Мне нужна AsyncTask, потому что я загружаю много вещей – Franck

+0

, если вы просто хотите скачать материал, используйте DownloadManager ... – WarrenFaith

ответ

1

Я не знаю подробности ваших кодов, но здесь является рекурсивным решение,

AsyncTask имеет метод onPostExecute. Просто вызовите еще одну задачу снова в этом методе. Однако, если Задача завершена (вы контролируете ее любым флагом), начните новую деятельность

protected void onPostExecuteTask(Object result) { 
    if(!flag){ 
     //Run the Task again 
     }else{ 
     //Start the new activity 
     } 
} 
+0

Спасибо, что это работает! – Franck

+0

Рад, что это сработало! :) –

+0

Мне это нравится. Хотя я несерьезно отношусь к задаче «навсегда». Однако было бы легко использовать счетчик и «повторить попытку» за несколько раз до выхода. Хорошее решение – Khanad

1

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

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

Таким образом, вы можете использовать свой экземпляр AsyncTask только один раз ,

Вы можете, конечно, создать еще одну задачу на вашем onPostExecute, но это плохая практика, как AsyncTasks предназначены для использования для выполнения коротких задач:

AsyncTasks в идеале должен быть использован для коротких операций (несколько секунды .) Если вам нужно поддерживать непрерывную работу потоков в течение длительных периодов времени , настоятельно рекомендуется использовать различные API, предоставляемые пакетом java.util.concurrent, таким как Executor, ThreadPoolExecutor и FutureTask.