android 实现Mqtt时,断开连接disconnect报错

       最近在Android下使用mqtt的客服端传输数据,mqtt服务本身是放在本地的service服务里面运行,在应用关闭的时候,mqtt服务也要断开连接,不然会继续占用手机的资源。关于mqtt服务器如何实现的,包括连接服务器,断线重连,订阅消息,处理消息,发布消息等,网上的信息很多我就不再重复。我把使用过程中遇到的一些问题说一下。

       首先是在断开连接时总是报错,用户虽然感觉不到错误但作为一名好的程序员必须改正这个bug,那么在service的onDestroy中,如何断开连接呢?一些网友直接调用client.disconnect(),出现了如此报错:

有的文章说要先调用client.unregisterResources(),再运行Thread.sleep(50),隔一点时间后调用client.disconnect(),可是我这样做了报错从上面的两个改为一个,AlarmPingSender$AlarmReceiver广播还是没能注销,如何断开MQTT连接呢?查看源码发现没那么复杂,直接关掉,释放这个资源就行了。在onDestroy()里调用下面的方法就不会有报错,MQTT客服端的具体实现可查看下载源码。

    public static void disconnect() {
        try {
            if (client != null) {
                if(client.isConnected())
                    client.unsubscribe(Constants.MYTOPIC);
                client.close();
                client.unregisterResources();
                client = null;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

点击下载源码

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值