【问题标题】:WorkManager custom URL constraint?WorkManager 自定义 URL 约束?
【发布时间】:2019-04-27 02:26:59
【问题描述】:

我已经使用android-priority-job-queue V2 2 年了(很棒的图书馆)。 Android Workmanager 刚刚出现。我喜欢它的地方在于它非常易于设置,您不必与JobSchedulerFirebaseJobDispatcherAlarmManager 争吵,它为我们完成了。对于android-priority-job-queue V2,我必须手动设置FrameworkJobSchedulerService/GcmJobSchedulerService

Workmanager 是否可以添加某个 http url 作为约束?有时,您想将一些数据发送到受保护的 wifi 中的服务器,并且您远离地理区域。当您位于服务器的地理区域并且您的设备连接到 wifi 时,您拍摄一张照片(例如)您必须稍后保存在该服务器上。 url 约束将确保如果 url 不可访问,则永远不会执行或刷新工作请求(设置为失败)。当 url 约束符合连接性时,执行工作请求。

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

有人可以帮我指出如果实施此功能可能会错过的文档部分吗?或者至少是一种使用WorkManager 实现它的方法。

P.S:WhisperSystems' JobManager,允许我添加自定义网址。然而问题是它的持久性在某些设备(某些三星型号)上不起作用。当我使应用程序崩溃时,数据从未恢复。我继续github for help,无济于事。我没有指责任何人,我只是想表明我一直在为此寻找解决方案。

【问题讨论】:

    标签: android android-workmanager


    【解决方案1】:

    我想我已经找到了一种使它与WorkManager 一起工作的方法,并且它可以按预期工作。 以下是使其工作的步骤:

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

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

    a. Ping 服务器(您可以使用后端进行设置),由 try/catch 包围

    b.如果成功,则发送位置数据。在收到 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      • 2018-06-17
      • 2016-12-05
      • 2017-04-25
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多