【问题标题】:Does AsyncTask started by Service finish when Service stops?Service 停止时 Service 启动的 AsyncTask 是否完成?
【发布时间】:2012-03-06 22:41:18
【问题描述】:

我有一个服务,它执行蓝牙发现和发送电子邮件等常规操作。根据状态,它启动不同的线程来进行蓝牙套接字连接或发送电子邮件。我正在使用 AsyncTask 发送电子邮件,目前运行良好。

我的问题是:我从 Service 启动的 AsyncTask 是否在 Service 停止时完成,还是 Service 直到 AsyncTask 完成才停止?在正常情况下,服务永远不会“停止”,但可以在内存不足、电池电量不足或手机关机时停止。 Service停止后我需要恢复操作,我想知道Service停止时如何判断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;
            }
        }       
    }
}

【问题讨论】:

    标签: android service android-asynctask


    【解决方案1】:

    如果它正在做某事并且在服务停止之间,任务将不会停止。除非你在service的onDestroy的实现中调用task的cancel方法,否则只会在完成后结束

    【讨论】:

    • 感谢您的及时回复!那么除非手机关机,否则异步任务不会停止?有没有办法知道asynctask的结果是否成功?
    • 如果所有处理 (doInBackground) 完成,则异步任务将完成。它不是一个保持活动的线程。事实上,它在一个单独的线程上做了繁重的工作,一旦处理完成,它会自动完成。您可以通过观察它的 onPostExecute 方法知道任务何时完成。此方法仅在任务完成时调用一次。欲了解更多信息:developer.android.com/reference/android/os/AsyncTask.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多