【发布时间】:2018-06-13 06:55:57
【问题描述】:
背景:
最近我不得不将服务迁移到 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 仍在处理响应。
我想确认这是否是正确的方法(因为这对我来说是一种蛮力)或者是否有更清洁的方法。
【问题讨论】:
-
如何调用您的 Web API?是改装吗?还有什么?
-
@pskink 是的。改造。
-
所以使用sync requests
-
@pskink 正是我想要的。这很棒。我测试过,它工作正常。我想知道为什么这不会引发 NetworkOnMainThreadException 错误。是因为我在 Intent Service 中产生了请求吗?
-
只是Log.d Thread.currentThread() 的值,你在logcat 上看到了什么?
标签: android android-service android-8.0-oreo jobintentservice