2015-04-01 3 views
3

Я знаю, что выполняется предыдущее выполнение AsyncTask - мой вопрос заключается в том, как закончить его и выполнить повторно, потому что мои параметры для него были изменены.AsyncTask Не удается выполнить задачу: задача уже выполнена

protected class ImageDownloadTask extends AsyncTask<Response, Void, Void>{ 

      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
       poolTasks.add(this); 
      } 

      @Override 
      protected Void doInBackground(Response... params) { 
       int count=params[0].getGetPosts().getPostsCount(); 
       for(int i = 0; i < count; i++){ 
        Post post = params[0].getGetPosts().getPosts(i); 

        if(!isCancelled()){ 
         try { 

//some code to download images 
} catch (Exception e) { 


         } 
         publishProgress(); 
        } else poolTasks.remove(this); 
       } 
       return null; 
      } 

      @Override 
      protected void onProgressUpdate(Void... values) { 
       super.onProgressUpdate(values); 
       adapter.notifyDataSetChanged(); 
      } 

      @Override 
      protected void onPostExecute(Void result) { 
       super.onPostExecute(result); 
       poolTasks.remove(this); 
       adapter.notifyDataSetChanged(); 
      } 

      @Override 
      protected void onCancelled() { 
       super.onCancelled(); 
       poolTasks.remove(this); 
      } 
     } 

теперь параметры обновления, которые, как я называю эту задачу:

 Log.d("MyLog"," imageTask.getStatus()="+imageTask.getStatus()); 
    if (imageTask.getStatus() == AsyncTask.Status.RUNNING){ 
     imageTask.cancel(true); 
    } 
    imageTask.execute(response); 

первый, тыс статус, судя по Бревно ЗАВЕРШЕНА. так как это может быть запущено? и как я могу перезапустить эту AsyncTask правильно?

ответ

0

Из личного опыта экземпляр AsyncTask подходит только для одного выполнения. Он не может использоваться повторно. Для вашей цели вы должны повторно инициализировать его, а затем выполнить.

Надеюсь, что смогу помочь.

Для справки, найдите заголовок «Правила подачи резьбы» here.

+0

Я использую его в статическом методе, поэтому мне это нужно как статический объект. Я не могу сделать только новый ImageTask.execute (ответ); - Мне нужно объявить его статическим первым – user2976267

+0

Не можете ли вы использовать переменную следующим образом? 'static ImageTask newInstance = new ImageTask (/ * params * /); newInstance.execute (/ * params * /); ' или ' ParentClass.staticInstance = new ImageTask (/ * params * /); ParentClass.staticInstance.execute (/ * params/*); ' Просьба поделиться кодом декларации, чтобы я мог лучше понять. – SlashG

+0

Я использую его так: это \t protected static ImageDownloadTask imageTask; в объявлении и imageTask = new ImageDownloadTask(); in onCreate(); – user2976267

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