收藏
回答

mqtt相关,点击小程序右上角三个点,选择重新进入小程序,不会触发页面中的onUnload吗?

第一次进入小程序,连接了mqtt,然后右上角三个点展开点击重新进入小程序,上次的mqtt连接没有断开,进入小程序后拿不到原来的mqtt实例,又重新创建了一个,导致两个实例在抢线,不断上线下线。有时候导致无法上线。

因为重新进入小程序前没有触发卸载的生命周期,无法执行断开mqtt的操作。

请问大佬们有什么解决办法吗?


最后一次编辑于  2022-09-20
回答关注问题邀请回答
收藏

1 个回答

  • Demons
    Demons
    2022-09-21

    只有打开操作才会触发onLaunch,重新进入是刷新不是关闭再打开,可以在onload,onshow做逻辑处理

    2022-09-21
    有用
    回复 5
    • MY
      MY
      2022-09-22
      这个重新进入把内存的数据都清理掉了。又不走卸载周期,这样很多场景都没法结束上一次的任务,建议加个钩子来处理业务。
      2022-09-22
      回复
    • York
      York
      2022-09-26回复MY
      可以试试在onload或者onshow里面判断mqtt是否连接,如果已经连接,就不调用mqtt连接方法,没连接就执行mqtt连接方法。
      2022-09-26
      回复
    • MY
      MY
      2022-09-27回复York
      重新进入小程序,是没有上一次的mqtt实例了的,并且还连接着,此时重新创建实例,两个相同clientId的实例会有冲突
      2022-09-27
      回复
    • York
      York
      2022-09-27回复MY
      你可以设置一个缓存,假如说连接mqtt,我标记一个A,然后在此进入页面的时候,看看A在不在。还有clientID,你最好不要用固定的数值,举个例子,可以用一个固定的数值+当前的时间。只有不重复就行。不然相同的clientID,在不同的地方登录,也会出现互相顶的问题
      2022-09-27
      回复
    • MY
      MY
      2022-09-27回复York
      目前采用的是随机clientId可以解决,不知道没有结束之前的连接的情况下,对服务器会不会产生额外费用
      2022-09-27
      回复
登录 后发表内容