Android 上的 Eclipse Paho MQTT 客户端,性能不佳

Eclipse Paho MQTT client on Android, poor performance

我正在尝试在我的 Android 应用程序上使用 Eclipse Paho MQTT 客户端来接收 MQTT 消息。

我收到了 ~100 message/second,消息相当小(基本上是小的 json 对象)。这些消息来自 Mosquitto 代理。

当我订阅 MQTT 主题并开始接收消息时,我的 Android 应用 UI 几乎死机了。我什至不对 messageArrived 回调中收到的消息做任何事情。

我的 Eclipse Paho MQTT 客户端使用非常基础,几乎与 Eclipse Paho 示例相同。

Eclipse Paho MQTT 客户端是否性能不佳,或者我可能做错了什么?

我正在使用: org.eclipse.paho.client.mqttv3:1.1.0 & org.eclipse.paho.android.service:1.1.1

更新

下面是我的实际代码,它是片段的一部分。所以在这个测试中我只是记录接收到的消息主题。同样没有日志记录,我得到了同样的结果,我的应用程序几乎死机了。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mqttAndroidClient = new MqttAndroidClient(getActivity().getApplicationContext(), "tcp://xx.xx.xx.xx:1883", MqttClient.generateClientId());
        mqttAndroidClient.setCallback(new MqttCallbackExtended() {
            @Override
            public void connectComplete(boolean b, String s) {
            }
            @Override
            public void connectionLost(Throwable throwable) {
            }
            @Override
            public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
                Log.d("Mqtt", "messageArrived " + topic);
            }
            @Override
            public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
            }
        });
    }

    @Override
    public void onStart() {
        super.onStart();

        MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
        mqttConnectOptions.setAutomaticReconnect(true);
        mqttConnectOptions.setCleanSession(true);

        try {
            mqttAndroidClient.connect(mqttConnectOptions, null, new IMqttActionListener() {
                @Override
                public void onSuccess(IMqttToken asyncActionToken) {
                    try {
                        mqttAndroidClient.subscribe("messages/#", 0);
                    } catch (Exception exception) {
                        Log.e("Mqtt", "subscribe error", exception);
                    }
                }
                @Override
                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                    Log.e("Mqtt", "Connection onFailure ", exception);
                }
            });
        } catch (Exception exception) {
            Log.e("Mqtt", "error " + exception);
        }
    }       

问题是 Paho Android 服务没有使用自己的线程来处理连接,所以一切都在 UI 线程中完成。

我最终使用了 Paho MqttAsyncClient,它以自己的方式处理连接。