小程式websocket頁面退出之onshow和onhide
阿新 • • 發佈:2018-12-21
今天遇到一個扯淡的問題,當我小程式頁面退出或者息屏後,隔一段時間後再次進入頁面,發現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 }) } },