处理JobIntentService和Thread Sleep

时间:2018-06-13 06:55:58

标签: android android-service android-8.0-oreo jobintentservice

背景

最近,我不得不将服务迁移到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大约需要150ms才能响应)

这确保了当API响应事件到达时,JIS仍然可以处理响应。

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

1 个答案:

答案 0 :(得分:0)

在您的JobService中,您可以从onStartJob()返回true,这表示您仍然需要这样做,JIS将无法完成。一旦得到响应,您可以调用finishJob()来完成JIS。