首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WorkManager自定义URL约束?

WorkManager自定义URL约束?
EN

Stack Overflow用户
提问于 2018-06-13 14:07:20
回答 1查看 534关注 0票数 1

我已经使用android-priority-job-queue V2两年了(伟大的图书馆)。安卓Workmanager刚刚出现。我喜欢的是,它真的很容易设置,你不需要与JobSchedulerFirebase JobDispatcherAlarmManager战斗,这是为我们做的。使用android-priority-job-queue V2,我必须手动设置FrameworkJobSchedulerService/GcmJobSchedulerService

Workmanager可以添加特定的http url作为约束吗?有时,有些数据要发送到受保护的wifi中的服务器,并且远离地理区域。当您在服务器的地理区域中,当您的设备连接到wifi时,您需要在该服务器上保存一张图片(例如)。url约束将确保如果无法访问url,则不会执行或刷新工作请求(设置为Failure)。当与连通性一致地满足url约束时,执行工作请求。

使用android-priority-job-queue V2,我必须实现一个逻辑,检查android-priority-job-queue V2shouldReRunOnThrowable(Throwable throwable, int runCount,int maxRunCount)抛出http异常时的情况,并使用房间持久化库保存未发送的数据。然后,每次我通过BroadCastReceiver检测到连接更改状态时,我都会尝试重新发送未发送的数据,并标记那些最终发送到哪里的数据(那些在android-priority-job-queue V2中完成onRun()的用户)。稍后,我将通过一个定期例程从数据库中清空每一个发送的数据。这个解决方案起作用了。但是假设我想发送不同类型的数据(图片、位置等),我必须为每个不同类型的作业重写相同的例程。我不知道如何对WorkManager做同样的事情。

有人能帮我吗?如果实现了这个特性,可以帮我指出我可能错过的部分文档吗?或者至少有一种用WorkManager实现它的方法。

P.S:WhisperSystems‘JobManager,允许我添加自定义url。但问题是,它的持续性在某些设备(一些三星型号)上没有发挥作用。当我崩溃应用程序时,数据一直没有恢复。我上了github求助,但没有用。我并不是指责任何人,我只是想证明我一直在寻求解决这一问题的办法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-26 18:26:59

我想我已经找到了一种方法来使它与WorkManager一起工作,而且它的工作原理与预期的一样。这些是使它发挥作用的步骤:

1. --我将每个位置信息(包含其URL目的地)放入OneTimeWorkRequest中,并以NetworkType.CONNECTED为约束,并为重试设置退避策略(假设我将其设置为10分钟)。

2.在扩展Worker的类中,在doWork()中:

a. Ping服务器(您可以用后端设置它)被try/catch包围。

如果b.成功,则发送位置数据。在收到http/https请求的成功状态后,返回WorkerResult.SUCCESS

c.如果您在ping服务器时将其转正和异常,或者在发送位置数据时没有收到http成功,则返回WorkerResult.RETRY

现在,除非用户重置应用程序,否则位置数据将保证到达其所需的服务器(当服务器可用时)。

代码语言:javascript
运行
复制
@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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50839302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档