我试图在我的Android应用程序上使用Eclipse Paho MQTT客户端来接收MQTT消息。
我收到~100条消息/秒,消息相当小(基本上是小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);
}
}
答案 0 :(得分:0)
问题是Paho Android Service没有使用自己的线程来处理连接,所以一切都在UI线程中完成。
我最终使用了Paho MqttAsyncClient,它自己处理连接。