我有一项任务需要在我的Android应用中在后台运行。它通过网络读取数据并填充数据库。可能需要几分钟才能运行。
一旦启动,它需要成功完成而不会中断。 (否则我最终会得到一个破碎的半填充数据库。)我意识到我永远无法保证总是完成,但我想尽可能让系统尽可能地杀掉它这个任务。为了安全起见,我想我会让它填充一个临时数据库,然后在成功完成导入后只换出新数据库中的旧数据库。
这是一种模态操作;在导入过程中,用户与应用程序进行交互没有意义。
我的第一次尝试是使用ASyncTask和Progress对话框来实现模态,但这显然打破了“不要中断”的要求。我可以解决ASyncTasks的屏幕旋转问题,但我认为这远远不够。
目前我不确定这应该是ASyncTask,Service,IntentService,这些的一些组合,还是完全不同的东西。你能帮我决定吗?
答案 0 :(得分:1)
我将它作为一项服务运行,另外我的服务器上还有一个干净的SQLite数据库,其中填充了客户端要检索的数据,因此我可以生成一种签名。让客户检查数据库的正确签名。如果签名与服务器签名不匹配,则重新初始化数据库填充过程。
这只是一个想法。我不知道你是否有可能做你想做的事情。
答案 1 :(得分:0)
在这种情况下,您最好使用服务。只要有足够的内存可用,Android运行时就可以独立运行。在它杀死服务的情况下,您可以将状态保存在一个包中,系统将尽快重启该过程,因此您可以恢复该过程,如果可能的话,您的解决方案:
Android Fundamentals, Service Section
然后很容易与服务进行通信,比如显示进度/通知等,使用像Mark Bredy in his Android Service Prototype提议的句柄注册表