写在前面
- 小程序文档对于生命周期没有一个很直观的解答
- 加上小程序入口实在是又杂又多 关闭逻辑也不是很直观
- 所以挑出来记录一下
页面的生命周期
页面主要的生命周期函数有onLoad
onReady
onShow
onHide
onUnload
下面讲根据几种不同的跳转方式看他们依次是怎么调用的
wx.navigateTo
A -> B
wx.redirectTo
A -> B
wx.navigateBack
A -> B -> C -> A (delta = 2)
以上看上去都没有什么问题
现在我在B里添加一个变量i
初始为0
每跳转一次自增并在onShow
里面打印出来
代码如下
var TAG = "Page B "
var i = 0
Page({
onclick: function () {
i++
wx.navigateTo({
url: '../C/C',
success: function (res) { },
fail: function (res) { },
complete: function (res) { },
})
},
onLoad: function (options) {
console.log(TAG + "onLoad" + " i = " + i)
},
复制代码
A -> B -> C -> A -> B
这里的i
是1而不是0
这个和安卓Activity的逻辑明显不一致
其实小程序的所有页面的初始变量在小程序生存时就已经初始化了
而在在之后的操作中除非整个小程序挂掉
是不会再有二次初始化的
为了绕开这个问题导致别的莫名其妙建议所有的变量都在onLoad
中进行初始化
小程序页面生命周期
这里主要选择 onLaunch
onShow
onHide
来进行总结
点击Home键(IDE上的切后台)
onShow
带过来的 包含了路径和场景值
(场景值是一个很重要的概念 点击了解 )
开发过程中会发现返回键、右上角的关闭、分享 都是这套逻辑
对。右上角的关闭也是 回到后台
那小程序真正意义上的关闭又是如何执行的呢
这里选用 1.4.0的版本去讲 运行机制
小程序没有重启的概念
当小程序进入后台,客户端会维持一段时间的运行状态,超过一定时间后
(目前是5分钟)会被微信主动销毁
当短时间内(5s)连续收到两次以上收到系统内存告警,会进行小程序的销毁
再次打开逻辑
小程序判定是否二次重载很大程度上是根据场景值去判定
这个逻辑和Native App也是不一样的
个人的解决方案是在 App.js
的 onShow
里根据自己的产品逻辑去对特定情况场景值进行判定操作
(也是挺坑)