WorkManager重复两次onWork吗?

时间:2018-07-27 20:42:20

标签: android backgroundworker workmanagers

我通过WorkManager和setInitialdelay延迟添加了地理围栏。我的jobintentservice收到转换并推出通知后,我从数据库中删除了激活的地理围栏,并使用mGeofencingClient.remove(清单1)从监视列表中将其删除。 以某种方式再次调用onWork方法,并尝试添加之前删除的地理围栏,导致我的应用崩溃。

工人阶级

  public static class DelayCreateGeofence extends Worker {
    public WorkerResult doWork() {
            Log.e("WorkerResult","mGeofenceList size: "+mGeofenceList.size());
            mGeofenceList.clear();
            mGeofenceList.add(createGeofenceObj(getInputData().getString("transitionstyp", "Enter"),
                    getInputData().getString("geofenceid", "defaultID"),
                    getInputData().getLong("expiredtime", 1000), getInputData().getDouble("latitude", 1.0),
                    getInputData().getDouble("longitude", 1.0), getInputData().getFloat("radius", 1.0f)));
            Log.e("CLASSDELAYCREATEGEOOBJ", "success: " + mGeofenceList.size());
            Log.e("geofID",mGeofenceList.get(0).getRequestId());
            addGeofences();
            return WorkerResult.SUCCESS;
        }
}

可能是因为jobintentservice和WorkManager在后台同时运行,所以当jobintentservice删除地理围栏时,onWork会尝试再次添加地理围栏吗?

当我检查日志时,我可以看到此工作流程

  1. onWork已激活并延迟添加地理围栏
  2. jobintentservice调用(通知),因为检测到过渡
  3. 从LocationService的监视服务以及数据库中删除已激活的地理围栏
  4. onWork重新开始,并尝试添加已删除的地理围栏。
  5. JobIntentService再次调用并尝试处理通知,但此处应用崩溃,因为当我尝试获取我使用的TriggeredGeofence地址时

    mydatabasehelper.getgeofencebyID(triggeringGeofence.getRequestID())。getAddress()

在这里,我得到了nullpointer,因为地理围栏已经从数据库中删除了

我在文档中找不到有关此问题的任何内容 我错过了什么吗?

谢谢

0 个答案:

没有答案