我们有一个网络客户端应用程序,我们正在尝试验证我们处理来自服务器的响应以及设备轮换的方法。本质上,我们这样做,
- 活动为网络响应注册一个接收器
- 活动通过启动意图服务来启动网络操作
- 服务通过广播它完成的意图来响应
我们(感知到的)问题是,当设备旋转时,活动被销毁/重新创建。在 Activity 的接收器未注册onPause()
和重新注册之间的这段时间内onResume()
,我们可能错过了服务广播的意图。
这是一个真正的问题吗?
如果是这样,我们假设了以下解决方案,
- 首先,不要使用意图在活动和服务之间进行通信
- 创建两个阻塞队列:应用程序类中的网络请求和响应
- 服务启动
take()
来自请求队列的线程 - 活动启动一个
take()
来自响应队列的线程 offer()
当它想要开始网络操作时,活动的请求队列- 发布网络操作的结果时服务
offer()
到响应队列