【发布时间】:2018-07-25 12:37:44
【问题描述】:
我正在开发一个 Android 应用,它有 3 种不同的网络使用案例。配置完成后,它需要执行一个潜在的长时间运行过程,将本地数据库与远程数据库同步。稍后,它需要检查远程数据库的更新并同步到本地数据库,但它们通常很小。
在第一次同步完成之前,主要活动无法真正使用。我想显示同步进度通知,和/或应用程序本身的进度指示器/活动(如果它在前台)。
同步后,您可以按需下载远程托管的 MP3。
对于用户启动的大型初始数据库同步、任何后续的按需 mp3 文件下载以及稍后计划的小型数据库同步,我应该使用哪些 Android 类/模式?我可以使用这些类中的任何一个在我的应用中显示进度通知和活动吗?
选项
对于我的 3 个用例,Android API 提供了这些类/接口:
- DownloadManager - 这对于下载数据文件看起来非常有用,但我的应用程序的初始同步基本上只是解析多个 huge XML HTTP 响应。我不确定它是否适合。特别是因为我可以根据需要拆分 XML HTTP 响应,并且它已经被 Retrofit 封送。
-
JobIntentService/IntentService/JobScheduler - 这看起来像我应该用于初始同步,也可能是任何后续同步。我不完全确定它们之间的区别,但看起来
JobIntentService是推荐使用的。 - SyncAdapter - 看起来对以后的更新很有希望,但我希望初始同步显示进度通知。这可以通过 SyncAdapter 实现吗?任何 mp3 下载都应立即排队并处理,因此这看起来并不适用。
- AsyncTask - 根据文档,仅用于短期运行的进程,不认为它适用于我的使用。
- Volley - 似乎不适用,因为我已经在使用 Retrofit。
建议用途
-
JobIntentService用于初始同步和后续同步 -
DownloadManager用于所有 mp3 下载 - 也许,将来使用
SyncAdapter进行后续同步
这是一个好的方法吗?我对是否使用 SyncAdapter 犹豫不决,因为它似乎需要做更多的工作才能获得与 Job 相同的数据。
【问题讨论】:
-
我已经浓缩了这个问题以回应接近投票。不知道为什么它被否决了。
标签: java android android-intent download android-download-manager