Android 服务关闭时的操作顺序
我正在编写一个使用AsyncTask执行一些网络操作的服务。假设AsyncTask的doInBackground花费了很长时间,在这种情况下,资源变少,操作系统正在关闭服务Android 服务关闭时的操作顺序,android,thread-safety,android-asynctask,android-service,android-lifecycle,Android,Thread Safety,Android Asynctask,Android Service,Android Lifecycle,我正在编写一个使用AsyncTask执行一些网络操作的服务。假设AsyncTask的doInBackground花费了很长时间,在这种情况下,资源变少,操作系统正在关闭服务 异步任务何时终止?调用onDestroy时,AsyncTask是否仍在运行,还是在调用之后发生,还是我负责关闭AsyncTask?我正在尝试确保onDestroy中的代码与doInBackground中的代码之间没有竞争条件。AsyncTask将继续运行,直到您取消它或系统销毁承载它的进程。系统本身不知道您的AsyncTas
异步任务何时终止?调用onDestroy时,AsyncTask是否仍在运行,还是在调用之后发生,还是我负责关闭AsyncTask?我正在尝试确保onDestroy中的代码与doInBackground中的代码之间没有竞争条件。AsyncTask将继续运行,直到您取消它或系统销毁承载它的进程。系统本身不知道您的AsyncTask,因此在关闭服务时不会对它做任何事情,它当然不知道创建AsyncTask的服务 很可能在调用onDestroy之后,应用程序的进程也会被销毁,异步任务也会被销毁。但是,最安全的策略是主动并取消onDestroy中的AsyncTask
一个可能有趣的补充说明是,如果进程在处理之前就终止了,排队等待处理的请求将丢失。因此,发送到AsyncTask的任何必须完成的操作都需要写入持久性任务日志,以便在未完成时可以重新发布这些操作。只是好奇,但为什么要在服务中使用AsyncTask?该服务与主应用程序在同一进程中运行,所以我相信在这种情况下,我需要使用异步任务,这样服务的网络访问就不会阻塞主ui线程。服务已经在自己的线程上运行。AsyncTasks用于活动服务尚未在其自己的线程上运行。来自android.app.Service文档:“服务不是一个线程。它本身不是一种脱离主线程工作的方法(以避免应用程序不响应错误)。”