我通过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会尝试再次添加地理围栏吗?
当我检查日志时,我可以看到此工作流程
JobIntentService再次调用并尝试处理通知,但此处应用崩溃,因为当我尝试获取我使用的TriggeredGeofence地址时
mydatabasehelper.getgeofencebyID(triggeringGeofence.getRequestID())。getAddress()
在这里,我得到了nullpointer,因为地理围栏已经从数据库中删除了
我在文档中找不到有关此问题的任何内容 我错过了什么吗?
谢谢