我们正在开发的应用程序是:
在后台收集数据
每隔几个小时上传一次数据
我们面临一个定期执行的后台任务问题,该后台任务定期将数据上传到我们的后端服务器。
问题是,在我们的测试设备(Nexus 5x,Galaxy S7)上运行时,它可以很好地上传数据,但是在我们发布的版本中,大约40%的用户一天之内没有将数据上传到我们的服务器。我们正在将Firebase Analytic与事件日志一起使用,以验证我们的方法是否有效。
我们之所以使用作业调度方法,是因为我们无法再在Android 8上使用后台服务(后台服务限制)。
在最新版本中,我们将Android JobScheduler作业用于网络后台任务。
这是我们的代码示例:
// Schedule JobScheduler job
ComponentName serviceComponent = new ComponentName(context, UploadJobService.class);
JobInfo job = new JobInfo.Builder(1, serviceComponent)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setPersisted(true)
.build();
JobScheduler mJobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
mJobScheduler.schedule(job);
Firebase Analytic的统计数据显示,一天之内,有40%的用户从未开始过该工作(onStartJob未被调用)。
我们考虑到用户设备可能没有互联网连接,并且设备可以进入打ze模式或应用程序处于应用程序待机模式。
我们想知道我们的解决方案是否有问题以及我们的用例是否有更好的解决方案。我们希望该应用正确发送一天之内收集的数据。
最佳答案
Framework Job Scheduler针对API级别21。并且,如果设备小于API级别21,则不会触发作业。
请通过应用程序中的链接作业调度来获得更好的性能。
Intelligent Job Scheduling
Firebase JobDispatcher支持将Google Play服务用作调度(运行)作业的实现,但是该库还允许您定义和使用其他实现:例如,您可能决定使用JobScheduler或编写自己的自定义代码。由于这种多功能性,如果您的应用程序针对的Android版本低于5.0(API级别21),我们建议您使用Firebase JobDispatcher。