android mqtt详解_MQTT基于安卓的使用

前言

上一篇提到了MQTT的通用方式,由于智能家居TV的项目网络波动频繁,通用的方式已经无法满足需求,经常会出现重复订阅导致收到多条消息,那就只能另辟蹊径了,最终找到了梦寐以求的MqttAndroidClient。

1.集成

集成方式和上一篇的MQTT简介和使用要新增配置,build.gradle新增

implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'

manifest文件里面需要注册服务

2.MqttAndroidClient重要源码解析

MqttAndroidClient是专门对MQTTClient的再封装拓展类,包含了订阅、连接以及多线程的处理,直接看MqttAndroidClient对于连接的封装源码,非关键代码已省略

public IMqttToken connect(MqttConnectOptions options, Object userContext,

IMqttActionListener callback) throws MqttException {

if (mqttService == null) {

}

else {

pool.execute(new Runnable() {

@Override

public void run() {

doConnect();

}

});

}

return token;

}

doConnect()连接操作放在子线程,有效避免网络波动连接时间过长阻塞主线程

private void doConnect() {

...

mqttService.connect(clientHandle, connectOptions, null,

activityToken);

...

}

阿里专门针对安卓客户端写了一个MQTTService,方便统一管理,除了连接操作,重连,断开连接都是在MQTTService中完成。

public void connect(String clientHandle, MqttConnectOptions connectOptions,

String invocationContext, String activityToken)throws MqttSecurityException, MqttException {

MqttConnection client = getConnection(clientHandle);

client.connect(connectOptions, null, activityToken);

}

public void connect(MqttConnectOptions options, String invocationContext,

String activityToken) {

...

if (myClient != null) {

if (isConnecting ) {

}else if(!disconnected){

}

else {

service.traceDebug(TAG, "myClient != null and the client is not connected");

service.traceDebug(TAG,"Do Real connect!");

setConnectingState(true);

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值