收藏
回答

wx.offAppHide无法取消监听事件

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug offAppHide 工具 1.02.1904090 2.6.1

在App.js的onLaunch方法中写了两个方法,一个wx.onAppShow,一个wx.onAppHide,在wx.onAppShow的监听方法中执行了wx.offAppHide方法


按照预想,进行前后台切换,会先触发一次小程序切后台事件,然后再触发小程序切前台事件,这个时候会触发wx.offAppHide方法取消掉对切后台事件的监听,所以后面切后台并不会进行触发回调事件


//app.js

App({

onLaunch: function() {

    wx.onAppShow(function(e){

        if (e.scene==1001){

            wx.offAppHide(function(){

            

            })

        }

    })

    wx.onAppHide(function(){

        console.log('111');

    })

   }

})


回答关注问题邀请回答
收藏

2 个回答

  • DWL
    DWL
    2019-05-07

    我这里测试没问题。

    首先,你的代码有 bug,在你首次打开的时候,wx.onAppShow 的回调函数会晚于 wx.onAppHide,所以你的 wx.onAppHide 压根是没用的。

    其次,你要注意 e.scene 是否真的是 1001。

    2019-05-07
    有用
    回复 6
    • 慢悠悠先生
      慢悠悠先生
      2019-05-08

      你好,能否给段你测试用的代码片段给我看看

      2019-05-08
      回复
    • DWL
      DWL
      2019-05-08回复慢悠悠先生

      就是你的这个代码片段,正确从1001场景进入的话,按照你的代码逻辑,onAppHide 挂上后会立即被 offAppHide,你可以试试

      2019-05-08
      回复
    • 慢悠悠先生
      慢悠悠先生
      2019-05-08回复DWL

      我后面已经去掉了这个判断了,改为直接去执行offAppHide,这样意味着onAppHide便不会被执行,但是在开发工具上,多次点击切后台和切前台,onAppHide依旧多次被触发

      2019-05-08
      回复
    • 慢悠悠先生
      慢悠悠先生
      2019-05-08回复DWL

      可以了,为啥去掉回调函数就行了呢?

      2019-05-08
      回复
    • DWL
      DWL
      2019-05-08回复慢悠悠先生

      是这样的,这个的设计跟 addEventListener/removeEventListener 是类似的,你用这种方式写:

      const func = () => {}
      wx.onAppHide(func)
      wx.offAppHide(func)


      2019-05-08
      回复
    查看更多(1)
  • 疯狂的小辣椒
    疯狂的小辣椒
    2019-05-06

    你好,麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)

    2019-05-06
    有用
    回复 5
    • 慢悠悠先生
      慢悠悠先生
      2019-05-07
      App({
       
      onLaunch: function() {
       
          wx.onAppShow(function(e){
       
              if (e.scene==1001){
       
                  wx.offAppHide(function(){
       
                   
       
                  })
       
              }
       
          })
       
          wx.onAppHide(function(){
       
              console.log('111');
       
          })
       
         }
       
      })

      上面就是复现的代码,只是在app.js写了,然后是用开发工具测试的,模拟的手机是iphone6

      2019-05-07
      回复
    • 疯狂的小辣椒
      疯狂的小辣椒
      2019-05-07回复慢悠悠先生

      麻烦按照教程指引来提供下代码片段

      2019-05-07
      回复
    • 慢悠悠先生
      慢悠悠先生
      2019-05-07回复疯狂的小辣椒

      https://developers.weixin.qq.com/s/axjSpbmK7T8g

      2019-05-07
      回复
    • 疯狂的小辣椒
      疯狂的小辣椒
      2019-05-07回复慢悠悠先生

      意思是首次切换后台再从【最近使用】进入小程序的时候,触发wx.onAppShow和wx.offAppHide,后续再从后台进入前台不应该再触发wx.onAppHide?

      2019-05-07
      回复
    • 慢悠悠先生
      慢悠悠先生
      2019-05-07回复疯狂的小辣椒

      是的,按我的理解应该是这样

      2019-05-07
      回复
登录 后发表内容