为什么我的Geofence广播接收器中的网络访问不可靠?

时间:2018-09-10 11:58:09

标签: android broadcastreceiver android-geofence android-jobscheduler android-doze

用例:

当地理围栏触发时,我们需要尽快联系服务器。我们已经通过隐式的BroadcastReceiver调用了服务来解决了这一问题,但是由于Doze和Oreo的背景限制,在新版本中存在问题。

尝试的修补程序:

  1. 我们将地理围栏注册从隐式->显式广播接收器移开,以避开“背景模式”限制。

  2. 我们尝试按照Google的示例进行操作,即广播接收方在 JobIntentService 上调用 enqueueWork()。问题在于,我们经常注意到在计划作业时间与实际运行时间之间存在较长的“滞后”。我们的记录超过一个小时!

因此,我们改为尝试将所有功能移到BroadcastReceiver中,并使用 goAsync()进行网络通话。 (如果尝试同步执行网络操作,则会收到“主线程无网络”异常)。

在可以启动线程并执行代码的范围内工作,但是网络操作给我们带来麻烦。


问题:

因此,由于上述问题,我们的当前解决方案是一个显式的BroadcastReceiver,它使用 goAsync()进行服务器调用。

但是,网络呼叫间歇性地工作。我们经常收到“ java.net.SocketException:套接字已关闭”错误。这不是服务器问题,当从我们的“常规”应用程序代码中调用时,它始终有效。

我不确定为什么会这样,但是我怀疑打ze模式吗?虽然,我不确定在地理围栏触发器实际调用Receiver时如何获得该信息。

问题:

  1. 有人从我们的goAsync()中知道为什么网络操作会失败吗?同样,该线程有效,只是我们在实际的网络操作中收到套接字错误。

  2. 在Android的较新版本中,除了我们已经尝试过的事情之外,是否还有其他方法可以通过地理围栏触发器直接进行网络通话?

    < / li>

指针和思想深表感谢!

0 个答案:

没有答案