宿主環境提供了 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函數