我在我当前的 Android 项目上使用 Paho-Mqtt 客户端从服务器获取实时提要。根据我的要求,当应用程序在前台时,我只需要 MQTT 服务。应用程序的每个屏幕都链接到不同的 mqtt 主题。示例:
If user in Activity A, I need to subscribe to a MQTT topic A.
If your move to Activity B I need to unsubscribe from topic A and subscribe to topic B.
现在的问题是,什么时候应该连接到 MQTT 服务,什么时候应该断开连接?
- 我可以在 onResume() 函数中连接(和订阅)MQTT 服务 每个 Activity 和 (unscubscribe &) 断开 onPause() 函数。
否则,
- 我可以在应用程序的 onCreate() 函数中连接到 MQTT 服务 所以,我可以在整个应用程序中保持客户端连接,并且 在个人 Activity 期间进行订阅和取消订阅 onResume()/onPause() 函数。
这两种方式都很糟糕,尤其是第二种方式,当应用程序不再在前台时,无法断开 MQTT 服务。因为没有直接的方法来处理 Android 应用程序进入后台或终止的事件。
谁能给我建议以最好的方式处理这个问题?
最佳答案
两个人为此接洽:
- 您可以在每个 Activity 中都有一个 MQTTClient 并在您的 Activity “内部”处理该客户端。
- 或者,这是一种资源更友好的方法,您可以在放置 MQTTClient 的位置创建一个后台服务。
你仍然需要在onResume() onPause()中订阅和取消订阅。 与您使用 BroadcastReceiver 或 Events 一样。
如果您想更好地控制生命周期的状态,请查看 Lifecycle.Events: Handling Lifecycles with Lifecycle-Aware Components
用它来执行sub或unsub。
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void connectListener() {
...
}
另请查看 RxJava这也可能有助于您找到解决方案。
祝你好运。
关于java - 何时在后台不需要 MQTT 的 Android 应用程序上断开 MQTT 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48900946/