У меня есть Служба, которая выполняет регулярные операции, такие как обнаружение 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;
}
}
}
}
Спасибо за быстрый ответ! Итак, асинхронность не будет остановлена, если телефон не выключится? и есть ли способ узнать, успешно ли результат асинтезы или нет? – Mira
задача async будет завершена, если будет завершена вся обработка (** doInBackground **). Это не живой поток. Фактически, он делает тяжелый подъем на отдельном потоке, и как только обработка завершена, он автоматически завершит работу. Вы можете знать, когда задача завершена, наблюдая ее ** onPostExecute ** метод. Этот метод вызывается только один раз, когда задача завершена. Для получения дополнительной информации: http://developer.android.com/reference/android/os/AsyncTask.html – waqaslam