宿主环境提供了 App() 构造器
用来注册一个程序App,需要留意的是App() 构造器必须写在项目根目录的app.js里,App实例是单例对象
,在其他JS脚本中可以使用宿主环境提供的 getApp() 来获取程序实例。
小程序App函数
每个小程序都需要在 app.js 中调用 App 方法注册小程序实例,绑定生命周期回调函数、错误监听和页面不存在监听函数等。
App() 必须在 app.js 中调用,必须调用且只能调用一次。不然会出现无法预期的后果。
// app.js
App({
onLaunch (options) {
// Do something initial when launch.
},
onShow (options) {
// Do something when show.
},
onHide () {
// Do something when hide.
},
onError (msg) {
console.log(msg)
},
onPageNotFound (options) {
},
onUnhandledRejection (options) {
},
globalData: 'I am global data'
})
onLaunch(Object object)
小程序初始化完成时触发,全局只触发一次。参数也可以使用 wx.getLaunchOptionsSync 获取。
一般我们会在这里取一些启动参数,比如scene、目标路径、目标参数等等,也可以在这里上报埋点用来统计用户冷启动小程序的次数(比如电商小程序需要统计销售业绩、转化率等等)。
onShow(Object object)
小程序启动,或从后台进入前台显示时触发。也可以使用 wx.onAppShow 绑定监听。
onHide
小程序从前台进入后台时触发。也可以使用 wx.onAppHide 绑定监听。
onError(String error)
小程序发生脚本错误
或 API 调用报错
时触发。也可以使用 wx.onError 绑定监听。
一般我们可以在这里上报异常错误点,用来检测我们小程序的整体运行情况,比如说刚上线的功能突然错误日志增多,那么我们可能需要考虑回滚或者快速上线一个Bug Fix版本。
onPageNotFound(Object object)
小程序要打开的页面不存在时触发。也可以使用 wx.onPageNotFound 绑定监听。
注意事项请参考 wx.onPageNotFound。
一般,当触发了这个函数,也就意味着我们的Page页面可能出现问题或者路由路径编写错误,需要给到用户一个友好的兜底方案。
App({
onPageNotFound(res) {
// 搞一个兜底方案
wx.redirectTo({
url: 'pages/...'
}) // 如果是 tabbar 页面,请使用 wx.switchTab
}
})
onUnhandledRejection(Object object)
小程序有未处理的 Promise 拒绝时触发。也可以使用 wx.onUnhandledRejection 绑定监听。注意事项请参考 wx.onUnhandledRejection。
程序的生命周期和打开场景
首先,要有一个前后台的概念,跟android开发一样的逻辑。
初次进入小程序的时候,微信客户端初始化好宿主环境,同时从网络下载或者从本地缓存中拿到小程序的代码包,把它注入到宿主环境,初始化完毕后,微信客户端就会给App实例派发onLaunch事件,App构造器参数所定义的onLaunch方法会被调用。
进入小程序之后,用户可以点击右上角的关闭,或者按手机设备的Home键离开小程序,此时小程序并没有被直接销毁,我们把这种情况称为“小程序进入后台状态
”,App构造器参数所定义的onHide方法会被调用。
当再次回到微信或者再次打开小程序时,微信客户端会把“后台”的小程序唤醒,我们把这种情况称为“小程序进入前台状态
”,App构造器参数所定义的onShow方法会被调用。
我们可以看到,App的生命周期是由微信客户端根据用户操作主动触发的
。为了避免程序上的混乱,我们不应该从其他代码里主动调用App实例的生命周期函数。
在微信客户端中打开小程序有很多途径:从群聊会话里打开,从小程序列表中打开,通过微信扫一扫二维码打开,从另外一个小程序打开当前小程序等,针对不同途径的打开方式,小程序有时需要做不同的业务处理,所以微信客户端会把打开方式带给onLaunch和onShow的调用参数options.
要获取最新的场景值说明请查看官方文档:https://mp.weixin.qq.com/debug/wxadoc/dev/framework/app-service/app.html
。
需要注意的是:只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。
App({
onLaunch: function () {
console.log(“App生命周期函数——onLaunch函数”);
},
onShow: function () {
console.log(“App生命周期函数——onShow函数”);
},
onHide: function () {
console.log(“App生命周期函数——onHide函数”);
},
onError: function (msg) {
console.log(“App生命周期函数——onError函数”);
}
});
-
首次启动小程序
1)当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
2)当小程序启动,或从后台进入前台显示,会触发 onShow -
当点击“后台”时,会触发以下函数
1)当小程序从前台进入后台,会触发 onHide
2)当点击“前台”时,就会再次触发onShow函数