2013-11-27 4 views
0

Я делаю приложение, которое отправляет обновление на веб-сервер при воспроизведении песен ... Я делаю обновление веб-сервера через asynctask, но иногда некоторая информация пропускается, а некоторые информация отправляется повторно. В некоторых случаях asyntask остается в рабочем состоянии, что делает его не выполняющимся после этого. Основная нить работает хорошо.AsyncTask не работает должным образом, когда вызывается повторно из потока

Я объявил экземпляр, как это в MainActivity

private static AsyncTask<Void, Void, Void> mTask = null; 

код AsyncTask является

private class SendingData extends AsyncTask<Void,Void,Void>{ 

     @Override 
     protected void onPreExecute(){ 
      //some task    
     }   
     protected void onPostExecute(Void params){ 
      Log.d("Tesing","After Post"); 
      super.onPostExecute(params);   
      } 
     @Override 
     protected Void doInBackground(Void... arg0) { 
      sendPost(); 
      return null; 
     } 

    } 

Мой призыв к AsyncTask, когда новые изменения песни в основном потоке. Это повторяющийся вызов

if(mTask.getStatus() == AsyncTask.Status.FINISHED){ 
        // My AsyncTask is done and onPostExecute was called 
        Log.d("AsyncTask Status","Finished"); 
        mTask = new SendingData(); 
        mTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); 

       }else if(mTask.getStatus() == AsyncTask.Status.PENDING){ 
        Log.d("AsyncTask Status","Pending"); 
        try { 
        Thread.sleep(10000); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
        mTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
       } 

ответ

3

Вы объявили о своей AsyncTask в качестве статической переменной. Это означает, что ваши ссылки будут замешаны, т. Е. При запуске нового AsyncTask вы перезапишете предыдущую ссылку новым.

+0

Должен ли я делать новую ссылку каждый раз, когда сталкиваюсь или должен вызывать asynctask? как бы проверить статус ранее называемой asynctask или просто вызвать новый, не думая о предыдущем, как ниже new SendingData(). executeOnExecutor (AsyncTask.SERIAL_EXECUTOR); – Saty

+0

, который лучше, чем AsyncTask.SERIAL_EXECUTOR или AsyncTask.THREAD_POOL_EXECUTOR для повторяющейся задачи? Пожалуйста, объясните мне. – Saty

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