Java 对于Android上长时间运行的网络进程,我有哪些选择?

Java 对于Android上长时间运行的网络进程,我有哪些选择?,java,android,android-intent,download,android-download-manager,Java,Android,Android Intent,Download,Android Download Manager,我正在开发一个Android应用程序,它有3种不同的网络使用案例。一旦配置好,它就需要执行一个潜在的长时间运行的过程,将本地数据库与远程数据库同步。稍后,它将需要检查来自远程数据库的更新并同步到本地数据库,但它们通常很小 直到第一次同步完成,主活动才真正可用。我想在同步进度上显示通知,如果在前台,则在应用程序本身上显示进度指示器/活动 一旦同步,您就可以按需下载远程托管的MP3 我应该使用哪些Android类/模式来进行大型的、由用户发起的初始DB同步、任何后续的按需mp3文件下载,以及稍后计划

我正在开发一个Android应用程序,它有3种不同的网络使用案例。一旦配置好,它就需要执行一个潜在的长时间运行的过程,将本地数据库与远程数据库同步。稍后,它将需要检查来自远程数据库的更新并同步到本地数据库,但它们通常很小

直到第一次同步完成,主活动才真正可用。我想在同步进度上显示通知,如果在前台,则在应用程序本身上显示进度指示器/活动

一旦同步,您就可以按需下载远程托管的MP3

我应该使用哪些Android类/模式来进行大型的、由用户发起的初始DB同步、任何后续的按需mp3文件下载,以及稍后计划的小型DB同步?我可以使用这些类在我的应用程序中显示进度通知和活动吗

选择权 对于我的3个用例,Android API提供了以下类/接口:

  • -这看起来对下载数据文件非常有用,但我的应用程序的初始同步基本上只是解析多个巨大的XML HTTP响应。我不确定它是否适合这样做。特别是因为我可以根据需要拆分XML HTTP响应,并且已经通过改造进行了封送
  • //-这看起来像是我应该使用的初始同步,也可能是任何后续同步。我不完全确定它们之间的区别,但看起来建议使用
    JobIntentService
  • -看起来对以后的更新很有希望,但我希望初始同步显示一个进度通知。使用SyncAdapter可以这样做吗?任何mp3下载都应该立即排队并处理,因此这看起来不适用于此
  • -根据文档,仅针对短期运行的流程,不认为它适用于我的使用
  • -似乎不适用,因为我已经使用改装
建议用途
  • JobIntentService
    用于初始同步和后续同步
  • DownloadManager
    用于所有mp3下载
  • 将来可能会使用
    SyncAdapter
    进行后续同步

这种方法行吗?我对是否使用SyncAdapter犹豫不决,因为它似乎需要更多的工作才能获得与作业相同的数据。

为此,请使用AsyncTask。如果您没有额外的lib依赖项,那么将它放在服务中

Rx java可能是一个解决方案。Rx可以轻松地在后台线程上运行长时间运行的工作

示例可以在这里找到

在投票结束后,我把问题浓缩了下来。不知道为什么它被否决了。你能详细说明一下:为了什么(初始同步、文件下载或重新同步)?为什么要参加服务?API文档明确指出,AsyncTask不应用于长时间运行的进程(超过几秒钟)。长时间运行意味着即使在相关应用程序关闭时也可以工作。只有服务才能做到这一点。现在下载需要在单独的线程上运行。AsyncTask允许在单独的线程中运行,而无需挂起服务。将2结合起来就可以了。无效答案,因为链接不再处于活动状态