1. 程式人生 > >小程式websocket頁面退出之onshow和onhide

小程式websocket頁面退出之onshow和onhide

今天遇到一個扯淡的問題,當我小程式頁面退出或者息屏後,隔一段時間後再次進入頁面,發現ws無法再次受到
伺服器推送的ws訊息,
原因:當你小程式頁面退出後(大約5秒),其實你的小程式已經處於休眠狀態,說白了就是你小程式裡的任何程式碼都不會執行,伺服器會認為你APP處於斷線狀態,會直接closesocket

解決辦法:這時你就需要用onshow和onhide,這兩個函式是用來判斷,onshow是來監視判斷是否進入顯示頁面(注:和onlond不一樣,onlond是載入整個整個頁面,onshow是來監視是否顯示頁面),onhide是監視頁面退出和隱藏

算了加上我的程式碼吧:

onShow:function(){
    var that = this;
    if(that.data.isscan)//判斷是否已經建立了ws請求
    {
      if (that.data.ishide) {
        that.setData({
          ishide: false
        })
        wx.sendSocketMessage({//不管ws請求是否關閉,都會發送訊息,如果傳送失敗說明沒有ws請求
          data: 'ws alive test',
          success(data) {
            console.log('ws is ok:')
          },
          fail(err) {
            var openid = wx.getStorageSync('openid')
            try {//不管是有沒有ws請求,都會closesocket,不管是成功還是異常,都會重新建立ws請求
              wx.closeSocket({
                success(data) {
                },
                fail(err) {
                },
                complete(data) {
                  app.socketrequest(openid, that)
                }
              })
            } catch (e) {
            }
          }
        })

      }
    }
  
    
  },
  onHide:function()
  {   
    var that = this;
    if (that.data.isscan)
    {
      that.setData({
        ishide: true
      })
    }
    
  },