java - 何时在后台不需要 MQTT 的 Android 应用程序上断开 MQTT 服务

标签 java android android-service mqtt paho

我在我当前的 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 服务,什么时候应该断开连接?

  1. 我可以在 onResume() 函数中连接(和订阅)MQTT 服务 每个 Activity 和 (unscubscribe &) 断开 onPause() 函数。

否则,

  1. 我可以在应用程序的 onCreate() 函数中连接到 MQTT 服务 所以,我可以在整个应用程序中保持客户端连接,并且 在个人 Activity 期间进行订阅和取消订阅 onResume()/onPause() 函数。

这两种方式都很糟糕,尤其是第二种方式,当应用程序不再在前台时,无法断开 MQTT 服务。因为没有直接的方法来处理 Android 应用程序进入后台或终止的事件。

谁能给我建议以最好的方式处理这个问题?

最佳答案

两个人为此接洽:

  1. 您可以在每个 Activity 中都有一个 MQTTClient 并在您的 Activity “内部”处理该客户端。
  2. 或者,这是一种资源更友好的方法,您可以在放置 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/

相关文章:

JavaFX 将组件添加到列表中,动态更改其内容

android - 错误 : Source Path does not exist for android icon png when building for ionic

android - 在 Android 上,如何从 Realm 列表构建 Realm 适配器?

java - 无法停止前台服务 stopSelf() 和 stopForeground(true) 不起作用

java - 尝试在 PostGres 中执行 array_append 函数时出现类型转换异常

java - 在 Android 中定位 map 上的按钮(在同一 Activity 上)时出现问题

java - 在 soapUI Pro 中启用 TLS 1.2

android - 在 Firebase 数据库 android 中管理同一节点的多个事件监听器

android - 自定义服务通知样式不再适用于奥利奥

java - IBM移动优先: sendActionToJS not working with background service in Android