2012-03-06 3 views
1

У меня есть Служба, которая выполняет регулярные операции, такие как обнаружение Bluetooth и отправка писем. В зависимости от состояния он запускает разные потоки, которые подключаются к сокету Bluetooth или отправляют электронные письма. Я использую AsyncTask для отправки электронной почты, и он работает хорошо на данный момент.Запускает ли AsyncTask Service завершение, когда Service останавливается?

Вопрос, который у меня есть, заключается в следующем: выполняет ли AsyncTask начало работы службы, когда служба остановлена ​​или служба не остановлена ​​до тех пор, пока не завершится выполнение AsyncTask? В нормальных условиях Служба никогда не останавливается, но ее можно остановить, когда память низкая, или когда батарея разряжена или когда телефон выключится. Мне нужно возобновить операцию после остановки Сервиса, и мне интересно, как узнать, завершилась ли AsyncTask, когда Служба остановлена.

Я включил моментальный снимок моего кода.

public class ScheduledService extends Service { 
    SendEmailAsyncTask emailTask; 
    boolean emailSuccess; 

    @Override 
    public int onStartCommand(Intent intent, int flag, int startId) { 
     log.v("onStart()"); 
     super.onStartCommand(intent, flag, startId); 
     // do regular operations 

     if (state == sendEmail) { 
      emailTask = new SendEmailAsyncTask(); 
      emailTask.execute(); 
     } 
    } 


    class SendEmailAsyncTask extends AsyncTask <Void, Void, Boolean> { 

     @Override 
     protected Boolean doInBackground(Void... params) { 
      // send email 
     } 

     @Override 
     protected void onPostExecute(Boolean result){ 
      if (result) { 
       createNotification("Email has been sent!"); 
       emailSuccess = true; 
      } else { 
       //try again 
       emailSuccess = false; 
      } 
     }  
    } 
} 

ответ

2

Задача не останавливается, если ее выполнение чего-то и между службами прекращается. Если вы не вызовете задачу отменить метод в сервисе onDestroy's осуществление, оно будет закончено только после его завершения.

+0

Спасибо за быстрый ответ! Итак, асинхронность не будет остановлена, если телефон не выключится? и есть ли способ узнать, успешно ли результат асинтезы или нет? – Mira

+0

задача async будет завершена, если будет завершена вся обработка (** doInBackground **). Это не живой поток. Фактически, он делает тяжелый подъем на отдельном потоке, и как только обработка завершена, он автоматически завершит работу. Вы можете знать, когда задача завершена, наблюдая ее ** onPostExecute ** метод. Этот метод вызывается только один раз, когда задача завершена. Для получения дополнительной информации: http://developer.android.com/reference/android/os/AsyncTask.html – waqaslam

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