Android上长时间运行的网络流程有哪些选择?

时间:2018-02-14 20:28:16

标签: java android android-intent download android-download-manager

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

在第一次同步完成之前,主要活动并不可用。我想在应用程序本身显示同步进度和/或进度指示/活动的通知,如果它在前台。

同步后,您可以按需下载远程托管的MP3。

我应该使用哪些Android类/模式进行大型的,用户启动的初始数据库同步,任何后续按需mp3文件下载以及后来安排的小型DB同步?我可以使用这些类中的任何一个在我的应用中显示进度通知和活动吗?

选项

对于我的3个用例,Android API提供了这些类/接口:

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

建议用法

  • JobIntentService用于初始同步和后续同步
  • 所有mp3下载
  • DownloadManager
  • 也许,将来使用SyncAdapter进行后续同步

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

2 个答案:

答案 0 :(得分:1)

如果您没有额外的lib依赖关系,Rx java可能是一个解决方案。 Rx可以很容易地在后台线程上运行长时间运行的工作。

示例可以在这里找到 https://piercezaifman.com/converting-an-asynctask-to-rxjava/

答案 1 :(得分:-2)

使用 AsyncTask 。并将其置于 服务