Android 运行服务下载内容(SyncAdapter vs JobScheduler vs service)

Android 运行服务下载内容(SyncAdapter vs JobScheduler vs service),android,android-service,android-syncadapter,android-jobscheduler,Android,Android Service,Android Syncadapter,Android Jobscheduler,我还是android新手,正在开发一个在android上运行的应用程序(API>=21)。此应用程序显示以前从本地网络上的服务器下载的数据,因此我需要实施一项服务,以便在设备上按需定期下载内容 同步适配器 我已经使用SyncAdapter实现了这个“Downloader”,它工作得很好,但最后代码非常冗长: 应用程序没有ContentProvider。内容作为文件下载 它在本地封闭网络上运行,因此不需要身份验证 该应用程序有3/4额外的类,没有做任何真正的工作 作业调度器 经过一些阅读和搜索

我还是android新手,正在开发一个在android上运行的应用程序(API>=21)。此应用程序显示以前从本地网络上的服务器下载的数据,因此我需要实施一项服务,以便在设备上按需定期下载内容

同步适配器 我已经使用SyncAdapter实现了这个“Downloader”,它工作得很好,但最后代码非常冗长:

  • 应用程序没有ContentProvider。内容作为文件下载
  • 它在本地封闭网络上运行,因此不需要身份验证
该应用程序有3/4额外的类,没有做任何真正的工作

作业调度器 经过一些阅读和搜索,我决定使用JobScheduler

“JobScheduler保证完成您的工作。”

它看起来很简单,有清晰的API,我说,所以我用JobScheduler重新实现了我的“Downloader”,结果非常好。该应用程序能够下载内容,编写良好的日志来跟踪错误和操作。作业在设备空闲时运行,并根据需要按预期启动/停止

我使用alarm manager执行作业的定期呼叫并打开wifi噢,我忘了提到该应用程序负责打开wifi,因为它在一个机箱内,可以作为信息亭使用

问题是有一个陷阱。文档中没有提到这一点,或者我完全看不见它。作业仅限于1分钟(在lolipop上为1分钟,在Android上为更多>=0),然后将调用onStopJob()。因此,当数据有点大时,在完成下载之前,my将被取消。当然,我可以继续我的线程,并继续在后台下载,但在这种情况下,我无法从API中受益,以保持良好的日志,重新安排我的工作和管理Wifi状态

我需要另一个实现 我需要类似于SyncAdapter或JobScheduler的东西,在Wifi打开和设备空闲时运行。 我不确定从JobScheduler触发服务是否是留给我的解决方案。在第三次实现同样的事情之前,我需要一些确定的信息

有什么想法吗