Завершается ли AsyncTask, запущенный службой, после остановки службы? - PullRequest
1 голос
/ 07 марта 2012

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

У меня такой вопрос: завершается ли 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;
            }
        }       
    }
}

1 Ответ

2 голосов
/ 07 марта 2012

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

...