android - WorkManager 自定义 URL 约束?
问题描述
我已经使用android-priority-job-queue V2
了 2 年了(很棒的图书馆)。安卓刚Workmanager
出现。我喜欢它的地方在于它非常易于设置,您不必与 、 或 争吵JobScheduler
,Firebase
JobDispatcher
它AlarmManager
是为我们完成的。我android-priority-job-queue V2
不得不手动设置FrameworkJobSchedulerService
/ GcmJobSchedulerService
。
是否可以Workmanager
添加某个 http url 作为约束?有时,您想将一些数据发送到受保护的 wifi 中的服务器,并且您远离地理区域。当您位于服务器的地理区域并且您的设备连接到 wifi 时,您拍摄一张照片(例如)您必须稍后保存在该服务器上。url 约束将确保如果 url 不可访问,则永远不会执行或刷新工作请求(设置为失败)。当 url 约束与连接性一致时,执行工作请求。
有了android-priority-job-queue V2
,我必须实现一个逻辑,检查何时抛出一个 http 异常,并使用Room Persistence Library保存未发送的android-priority-job-queue V2
数据。然后,每次我通过BroadCastReceiver检测到连接更改状态时,我都会尝试重新发送未发送的数据并标记那些最终发送的数据(那些完成了in 的数据)。稍后,我将通过定期例程从数据库中刷新所有发送的数据。此解决方案有效。但是假设我想发送不同类型的数据(图片、位置等),我必须为每种不同类型的 Job 重写相同的例程。我不知道如何对.shouldReRunOnThrowable(Throwable throwable, int runCount,int maxRunCount)
onRun()
android-priority-job-queue V2
WorkManager
如果实现此功能,有人可以通过指出我可能错过的文档部分来帮助我吗?或者至少是一种使用WorkManager
.
PS:WhisperSystems 的 JobManager允许我添加自定义 url。然而问题是它的持久性在某些设备(某些三星型号)上不起作用。当我使应用程序崩溃时,数据从未恢复。我去github寻求帮助,无济于事。我并没有指责任何人,我只是想表明我一直在为此寻找解决方案。
解决方案
我想我已经找到了一种让它与 一起工作的方法,WorkManager
并且它可以按预期工作。这些是使其工作的步骤:
1.我将每个位置信息(包含其 URL 目标)放在一个OneTimeWorkRequest
,NetworkType.CONNECTED
作为约束,并为重试设置一个退避策略(假设我将其设置为 10 分钟)。
2.在扩展类中Worker
,在doWork()
:
一个。Ping 服务器(你可以用你的后端设置它)被 try/catch 包围
湾。如果成功,则发送位置数据。在收到 http/https 请求的成功状态后,您返回WorkerResult.SUCCESS
C。如果当你 ping 服务器时它兑现和异常,或者在发送位置数据时你没有收到 http 成功,你返回WorkerResult.RETRY
现在,除非用户重置应用程序,否则可以保证位置数据到达其所需的服务器(当服务器可用时)
@NonNull
@Override
public WorkerResult doWork() {
try {
//ping server (according to its URL)
//if the ping successful we send the location data to the server
//if the ping isn't successful we return WorkerResult.RETRY
} catch (Exception ex) {
ex.printStackTrace();
return WorkerResult.RETRY;
}
}
return WorkerResult.SUCCESS;
}
推荐阅读
- angular - 如果模态中有未保存的更改,如何防止取消模态?
- sprite-kit - 使 SKLabelNode 不透明背景的简单方法?
- debian - Debian/Ubuntu Java 11 java-alternative
- php - 错误:需要支持 FreeType 的 GD PHP 扩展或支持 PNG 的 ImageMagick PHP 扩展
- javascript - 如何在 html 中的元素之前添加单数关闭 div '
- xslt - 在 XSLT 中实现动态 xpath:for-each-group
- python - 如何与 modelica 模型进行联合仿真?
- naming-conventions - 您如何将超时前的最小秒数描述为变量?
- javascript - 重新部署 Web 应用程序会导致看似随机的 JavaScript 函数和对象未定义
- acumatica - 在自定义 DAC 的选择器上启用“AllowAddNew”和/或“AllowEdit”