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

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

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

在第一次同步完成之前,主要 Activity 并不真正可用。我想显示有关同步进度的通知,和/或应用本身的进度指示器/Activity (如果它在前台)。

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

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

选项

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

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

建议的用法

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

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

最佳答案

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

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

关于java - 对于 Android 上长时间运行的网络进程,我有哪些选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48795658/

相关文章:

java - 服务在单次广播中触发数百次

java - Protobuf解析器解析其他对象?

Java:包裹在 JScrollPane 中的 JEditorPane 的奇怪行为

android - VideoView 中的 seekTo

android - strings.xml 的所有字符串在 Android 的堆内存中是否始终可用?

android - Intent 打开 Wi-Fi Direct 设置

java - 通过java编写Windows shell脚本

java - 如何在querydsl中使用SQLExpression.datediff()返回的NumberExpression

java - 将操作栏的标题从 Fragment 更改为 Activity

android - 如何解决 android.content.ActivityNotFoundException 错误中的致命异常