Android MQTT关于断开连接disconnect报错原因

最近项目遇到一个需求,就是在登录状态的时候。才能接收到消息。所有我在上线,下线状态的时候。做了MQTT断开和连接的动作。然后就是发生了。我们标题的这关键点了。直接报错了。报错的内容如下:

MqttAndroidClient unregisterRecevicer after disconnect throw missing call unregisterRecevicer...

直接报错了。跟剧情完全不一样啊,但是好奇怪。之前是页面销毁就不会报这个错误。之前是退出登录的时候。页面顺带一起销毁Service的。就没问题。然后现在是页面还在。但是给执行Service的绑定和解绑动作的时候就会出现问题。
如果你依赖的也是下面的这个,那么这个帖子应该有希望会帮到你:
复制代码
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'

/**
     * 开启service
     */
    public static void startService(Context context) {
        mqttSetUp = null;
        TOPIC = UUID_PREFIX + SharedCacheUtils.getInstance(context).getUUid();
        if (context != null) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                context.startForegroundService(new Intent(context.getApplicationContext(), MQTTService.class));
            } else {
                context.startService(new Intent(context.getApplicationContext(), MQTTService.class));
            }
        }
    }

​
/**
     * 关闭service
     */
    public static void stopService(Context context) {
        if (context != null) {
            context.stopService(new Intent(context.getApplicationContext(), MQTTService.class));
        } else {// 如果异常关闭,导致UI关闭,服务没解绑。走else
            try {
                if (client != null) {
                    client.unregisterResources();
                    client.close();
                    client.disconnect(0);
                    client.setCallback(null);
                }
                client = null;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

​
这个是我之前的代码,然后我就去查找这个问题的解决思路,然后就发现了很多帖子的作者也遇到了这个问题。报错信息是一样的。但是好像没有解决我的问题。离谱的是,我搜到了好多VIP的帖子。我看不了。哈哈哈。没有分享精神啊!差评。
然后我就去该依赖的报错反馈信息里面找找看。果然有,但是很多都是建议。能不能用还得靠自己实践了才知道有没有帮助。我发现很多帖子都有点像是AI的,很不靠谱。后面通过自己实践之后就解决了,解决方案如下:
复制代码
/**
     * 关闭service
     */
    public static void stopService(Context context) {
        if (context != null) {
            context.stopService(new Intent(context.getApplicationContext(), MQTTService.class));
        } else {// 如果异常关闭,导致UI关闭,服务没解绑。走else
            try {
                if (client != null) {
                    client.unregisterResources();
                    client.close();
                    //client.disconnect(0);
                    client.setCallback(null);
                }
                client = null;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
注释disconnect的动作。就不会报错了。如果你有更好的解决方式,欢迎评论哦!下面就是解决方法的出处。希望能帮助到你。

https://github.com/eclipse-paho/paho.mqtt.android/issues/212

相关推荐
用户69371750013844 分钟前
AI 领域的 Harness,到底是什么意思?
android·前端·后端
恋猫de小郭1 小时前
Flutter 开发怎么做 Agent ?从工程实战详细给你解读下
android·前端·flutter
安卓修改大师1 小时前
安卓修改大师实战:Activity生命周期全解析与Smali插桩教程
android
zhangphil1 小时前
Android集成封装libjpeg-turbo解码库,Kotlin语言实现
android
码上有光1 小时前
c++:map和set的底层实现
android·java·c++·set·map
峥嵘life1 小时前
Android GMS 开机向导横竖屏切换配置总结
android·学习
apihz2 小时前
PING 接口 PLUS 全球版 —— 免费全球多节点 Ping 检测 API教程
android
阿pin2 小时前
Android随笔-epoll机制
android·epoll
plainGeekDev2 小时前
Gradle 写法 → Kotlin DSL
android·java·kotlin
三少爷的鞋2 小时前
协程深度解析:明明只有 8 个异步任务,为何 App 线程数瞬间突破 一倍?
android