Android 安卓:can';t决定如何管理后台任务

Android 安卓:can';t决定如何管理后台任务,android,service,background,android-asynctask,Android,Service,Background,Android Asynctask,我有一个任务需要在Android应用程序的后台运行。它通过网络读取数据并填充数据库。运行可能需要几分钟 一旦启动,它需要在不中断的情况下成功完成。(否则,我将以一个半填充的数据库崩溃告终。)我意识到我永远无法保证它将始终完成,但我想让系统尽可能难以完成这项任务。为了安全起见,我想我会让它填充一个临时数据库,然后在成功完成导入后,只将旧数据库替换为新数据库 这是一种模式操作;在导入过程中,用户与应用程序交互是没有意义的 我的第一次尝试是使用带有进度对话框的ASyncTask来实现模式,但这显然打破

我有一个任务需要在Android应用程序的后台运行。它通过网络读取数据并填充数据库。运行可能需要几分钟

一旦启动,它需要在不中断的情况下成功完成。(否则,我将以一个半填充的数据库崩溃告终。)我意识到我永远无法保证它将始终完成,但我想让系统尽可能难以完成这项任务。为了安全起见,我想我会让它填充一个临时数据库,然后在成功完成导入后,只将旧数据库替换为新数据库

这是一种模式操作;在导入过程中,用户与应用程序交互是没有意义的

我的第一次尝试是使用带有进度对话框的ASyncTask来实现模式,但这显然打破了“不要中断”的要求。我可以通过异步任务解决屏幕旋转问题,但我认为这还不够


目前,我不确定这是一个异步任务、一个服务、一个IntentService、这些的一些组合,还是完全其他的东西。你能帮我决定吗?

我会将其作为一项服务运行,另外,我的服务器上还有一个干净的SQLite DB,其中填充了客户端将要检索的数据,以便生成一种签名。让客户检查DB的正确签名。如果签名与服务器签名不匹配,则重新初始化数据库填充过程


这只是一个想法。我不知道你想做的事是否可行。

在这种情况下,你最好接受服务。只要有足够的内存可用,Android运行时就会让它继续工作。在它终止服务的情况下,您可以将状态保存在捆绑包中,系统将尽快重新启动进程,以便您可以恢复进程,如果您的解决方案可能的话:


然后就可以很容易地与服务进行通信,比如显示进度/通知等,使用句柄注册表,比如

我很欣赏一个服务可以更好地保持任务的活动性,但是我不清楚如何实现模式,或者显示进度对话框,在服务场景中,我不确定你所说的模态是什么意思,但是看看Mark Bredy主持的github项目,他展示了一个非常简洁的架构来处理与服务交互的服务模式,比如从活动或通知用户。在一般情况下,通过处理程序进行通信将完成这项工作。所谓模态,我的意思是,在操作完成之前,用户应该无法与应用程序进行交互。从用户的角度来看,这在很大程度上是一个阻塞/前景操作。