0

背景:

最近我不得不将一个服务迁移到 JobIntentService (JIS) 以支持 Android 8.0 后台服务限制。此服务在 FirebaseInstanceIDService 调用它后将令牌注册到我的服务器。

问题:

我有一个必须从 JobIntentService (JIS) 进行的网络调用。所有的网络调用操作都是通过 Eventbus (EB) 处理的。

流程如下

JIS -> request API (EB) -> {API Call Handler} -> Send Response (EB) -> JIS -> Handle response. 

您可能已经猜到的问题是,当请求 API 事件被触发时,Intent 服务会自行完成并且不处理响应事件。

临时解决方案:

我以一种肮脏的方式解决这个问题的方法是在触发事件后立即调用 Thread.sleep(400)。(API 大约需要 150 毫秒来响应)

这可确保在 API 响应事件到达时 JIS 仍在处理响应。


我想确认这是否是正确的方法(因为这对我来说感觉像是一种蛮力)或者是否有更清洁的方法。

4

1 回答 1

0

在 Your JobService 中,您可以从 onStartJob() 返回 true,这表明您还有工作要做,因此 JIS 不会完成。收到响应后,您可以调用 finishJob() 来完成 JIS。

于 2018-06-13T07:02:41.220 回答