柚子快報激活碼778899分享:java 小程序——生命周期
柚子快報激活碼778899分享:java 小程序——生命周期
文章目錄
運行機制更新機制生命周期介紹應用級別生命周期頁面級別生命周期組件生命周期生命周期兩個細節(jié)補充說明總結
運行機制
用一張圖簡要概述一下小程序的運行機制 冷啟動與熱啟動:
小程序啟動可以分為兩種情況,一種是冷啟動,一種是熱啟動
冷啟動:如果用戶首次打開,或小程序銷毀后被用戶再次打開,此時小程序需要重新加載啟動
熱啟動:如果用戶已經(jīng)打開過某小程序,然后在一定時間內(nèi)再次打開該小程序,此時小程序并未被銷毀,只是從后臺狀態(tài)進入前臺狀態(tài)
前臺 以及 后臺狀態(tài):
小程序啟動后,界面被展示給用戶,此時小程序處于「前臺」狀態(tài)。
當用戶「關閉」小程序時,小程序并沒有真正被關閉,而是進入了「后臺」狀態(tài),當用戶再次進入微信并打開小程序,小程序又會重新進入「前臺」狀態(tài)
切后臺的方式包括但不限于以下幾種:
點擊右上角膠囊按鈕離開小程序點擊返回鍵離開小程序屏幕左側右滑離開小程序
掛起:
小程序進入「后臺」狀態(tài)一段時間后(5 秒),微信停止小程序 JS 線程執(zhí)行,小程序進入「掛起」狀態(tài),當開發(fā)者使用了后臺播放音樂、后臺地理位置等能力時,小程序可以在后臺持續(xù)運行,不會進入到掛起狀態(tài)
銷毀:
如果用戶很久沒有使用小程序,或者系統(tǒng)資源緊張,小程序會被銷毀,即完全終止運行。
當小程序進入后臺并被「掛起」后,如果很長時間(目前是 30 分鐘)都未再次進入前臺,小程序會被銷毀
當小程序占用系統(tǒng)資源過高,可能會被系統(tǒng)銷毀或被微信客戶端主動回收。
更新機制
在訪問小程序時,微信會將小程序代碼包緩存到本地。
開發(fā)者在發(fā)布了新的小程序版本以后,微信客戶端會檢查本地緩存的小程序有沒有新版本,并進行小程序代碼包的更新。
小程序的更新機制有兩種:啟動時同步更新 和 啟動時異步更新
啟動時異步更新
啟動時同步更新:微信運行時,會定期檢查最近使用的小程序是否有更新。如果有更新,下次小程序啟動時會同步進行更新,更新到最新版本后再打開小程序。如果 用戶長時間未使用小程序時,會強制同步檢查版本更新
啟動時異步更新
啟動時異步更新:在啟動前沒有發(fā)現(xiàn)更新,小程序每次 冷啟動 時,都會異步檢查是否有更新版本。如果發(fā)現(xiàn)有新版本,將會異步下載新版本的代碼包,將新版本的小程序在下一次冷啟動進行使用,當前訪問使用的依然是本地的舊版本代碼
在啟動時異步更新的情況下,如果開發(fā)者希望立刻進行版本更新,可以使用 wx.getUpdateManager API 進行處理。在有新版本時提示用戶重啟小程序更新新版本。
App({
/**
* 當小程序初始化完成時,會觸發(fā) onLaunch(全局只觸發(fā)一次)
*/
onLaunch: function () {
const updateManager = wx.getUpdateManager()
updateManager.onCheckForUpdate(function (res) {
// 請求完新版本信息的回調(diào)
console.log(res.hasUpdate)
})
updateManager.onUpdateReady(function () {
wx.showModal({
title: '更新提示',
content: '新版本已經(jīng)準備好,是否重啟應用?',
success(res) {
if (res.confirm) {
// 新的版本已經(jīng)下載好,調(diào)用 applyUpdate 應用新版本并重啟
updateManager.applyUpdate()
}
}
})
})
updateManager.onUpdateFailed(function () {
// 新版本下載失敗
})
}
})
代碼:
// app.js
App({
// onLaunch 是小程序的鉤子函數(shù),這個鉤子函數(shù)在冷啟動時肯定會執(zhí)行到
// 當小程序冷啟動時,會自動微信后臺請求新版本的信息,如果有新版本,會立即進行下載
onLaunch () {
// 使用 wx.getUpdateManager 方法監(jiān)聽下載的狀態(tài)
const updateManager = wx.getUpdateManager()
// 當下載完成新版本以后,會觸發(fā) onUpdateReady 回調(diào)函數(shù)
updateManager.onUpdateReady(function () {
// 在回調(diào)函數(shù)中給用戶提示,
wx.showModal({
title: '更新提示',
content: '新版本已經(jīng)準備好,是否重啟應用?',
success(res) {
if (res.confirm) {
// 強制當前小程序使用新版本并且會重啟當前小程序
updateManager.applyUpdate()
}
}
})
})
}
})
生命周期介紹
關于生命周期,官方的流程圖是這樣的 看起來復雜難懂,下面讓我們慢慢了解
應用生命周期是指應用程序進程從創(chuàng)建到消亡的整個過程
小程序的生命周期指的是 小程序從啟動到銷毀的整個過程
在打開一個小程序應用的時候都需要經(jīng)歷一系列的初始化步驟,比如頁面是否加載完成、頁面是否初次渲染完成等等。
在此過程中,小程序也會運行被稱為生命周期鉤子的函數(shù),這些函數(shù)由小程序框架本身提供,被稱為生命周期函數(shù),生命周期函數(shù)會按照順序依次自動觸發(fā)調(diào)用。幫助程序員在特定的時機執(zhí)行特定的操作,輔助程序員完成一些比較復雜的邏輯。讓開發(fā)者有機會在特定階段運行自己的代碼。
小程序的生命周期分類三類:應用級別、頁面級別和組件級別 3 種類型
應用級別生命周期
知識點:
應用生命周期通常是指一個小程序從 啟動 → 運行 → 銷毀的整個過程
應用生命周期伴隨著一些函數(shù),我們稱為 應用生命周期函數(shù),應用生命周期函數(shù)需要 在 app.js 文件的 App() 方法中定義
當整個小程序應用運行到某個時機的時候,我們需要做一些事情。例如:當小程序啟動成功之后,我們要獲取小程序的一些信息,就可以在小程序啟動成功時的鉤子函數(shù)中寫代碼獲取我們想要的信息。
生命周期必填說明onLaunch否監(jiān)聽小程序初始化,全局只會執(zhí)行 1 次onShow否監(jiān)聽小程序啟動或切前臺onHide否監(jiān)聽小程序切后臺
? 注意事項:
從小程序生命周期的角度來看,我們一般講的「啟動」專指冷啟動,熱啟動一般被稱為后臺切前臺。 App() 必須在 app.js 中調(diào)用,必須調(diào)用且只能調(diào)用一次。不然會出現(xiàn)無法預期的后果。
小程序啟動后,后臺會首先完成小程序的初始化,該過程只會觸發(fā)一次;之后會完成顯示的工作,用戶可以操作小程序從前臺進入后臺以及從后臺回復到前臺顯示;小程序在后臺運行一段時間,當系統(tǒng)資源不足時會被注銷。
代碼:
?? app.js
App({
/**
* 當小程序初始化完成時,會觸發(fā) onLaunch(全局只觸發(fā)一次)
*/
onLaunch: function () {
// 監(jiān)聽小程序初始化
console.log('onLaunch: 當小程序初始化完成時,會觸發(fā) onLaunch')
},
/**
* 當小程序啟動,或從后臺進入前臺顯示,會觸發(fā) onShow
*/
onShow: function (options) {
// 監(jiān)聽小程序的顯示
console.log('onShow: 當小程序啟動,或從后臺進入前臺顯示')
},
/**
* 當小程序從前臺進入后臺,會觸發(fā) onHide
*/
onHide: function () {
// 監(jiān)聽小程序的隱藏
console.log('onHide: 小程序從前臺進入后臺')
}
})
頁面級別生命周期
知識點:
頁面生命周期就是指小程序頁面從 加載 → 運行 → 銷毀的整個過程
當某個頁面運行到某個時機的時候,我們需要做一些事情,例如: 當某個頁面加載完畢之后,需要發(fā)請求獲取當前頁面所需的數(shù)據(jù),就可以在對應的頁面加載完成后的鉤子函數(shù)中執(zhí)行發(fā)送請求的代碼。
小程序中的一個頁面都需要在對應頁面的 .js 文件中調(diào)用 Page() 方法來注冊。Page() 接受一個 Object 類型參數(shù),其指定頁面的初始數(shù)據(jù)、生命周期回調(diào)、事件處理函數(shù)等。
生命周期必填說明onLoad否頁面加載時觸發(fā) (一個頁面只會調(diào)用一次)onShow否頁面顯示時觸發(fā),頁面顯示/切入前臺時觸發(fā)onReady否頁面初次渲染完成時觸發(fā)(一個頁面只會調(diào)用一次)代表頁面已經(jīng)準備妥當,可以和視圖層進行交互onHide否頁面隱藏/切入后臺時觸發(fā)onUnload否頁面卸載時觸發(fā)
代碼:
// pages/home/home.js
Page({
// coding...
// 生命周期函數(shù)--監(jiān)聽頁面加載
onLoad: function (options) {
console.log('頁面加載完畢')
},
// 生命周期函數(shù)--監(jiān)聽頁面顯示
onShow: function () {
console.log('監(jiān)聽頁面顯示,此時頁面處于顯示狀態(tài)')
},
// 生命周期函數(shù)--監(jiān)聽頁面初次渲染完成
onReady: function () {
console.log('頁面初次渲染已經(jīng)完成')
},
// 生命周期函數(shù)--監(jiān)聽頁面隱藏
onHide: function () {
console.log('當前頁面處于隱藏狀態(tài)')
},
// 生命周期函數(shù)--監(jiān)聽頁面卸載
onUnload: function () {
console.log('頁面卸載時觸發(fā)')
}
})
組件生命周期
組件的生命周期,指的是組件自身的一些函數(shù),這些函數(shù)在特殊的時間點或遇到一些特殊的框架事件時被自動觸發(fā)。 組件的生命周期函數(shù)需要在 lifetimes 字段內(nèi)進行聲明
最重要的生命周期是 created attached detached 包含一個組件生命周期流程的最主要時間點
組件實例剛剛被創(chuàng)建好時, created 生命周期被觸發(fā)。此時,組件數(shù)據(jù) this.data 就是在 Component構造器中定義的數(shù)據(jù) data 。 此時還不能調(diào)用 setData 。 通常情況下,這個生命周期只應該用于給組件 this添加一些自定義屬性字段。在組件完全初始化完畢,進入頁面節(jié)點樹后, attached 生命周期被觸發(fā)。此時, this.data 已被初始化為組件的當前值。這個生命周期很有用,絕大多數(shù)初始化工作可以在這個時機進行。在組件離開頁面節(jié)點樹后, detached 生命周期被觸發(fā)。退出一個頁面時,如果組件還在頁面節(jié)點樹中,則 detached 會被觸發(fā)
代碼:
Component({
lifetimes: {
created: function () {
// 在組件實例剛剛被創(chuàng)建時執(zhí)行,注意此時不能調(diào)用 setData
// 一般用來為組件添加一些自定義屬性字段。
},
attached: function() {
// 在組件實例進入頁面節(jié)點樹時執(zhí)行
},
detached: function() {
// 在組件實例被從頁面節(jié)點樹移除時執(zhí)行
},
},
// 以下是舊式的定義方式,可以保持對 <2.2.3 版本基礎庫的兼容
attached: function() {
// 在組件實例進入頁面節(jié)點樹時執(zhí)行
},
detached: function() {
// 在組件實例被從頁面節(jié)點樹移除時執(zhí)行
},
// ...
})
生命周期必填說明created否在組件實例剛剛被創(chuàng)建時執(zhí)行attached否在組件實例進入頁面節(jié)點樹時執(zhí)行ready否在組件在視圖層布局完成后執(zhí)行moved否在組件實例被移動到節(jié)點樹另一個位置時執(zhí)行detached否在組件實例被從頁面節(jié)點樹移除時執(zhí)行
組件還有一些特殊的生命周期,這類生命周期和組件沒有很強的關聯(lián)
主要用于組件內(nèi)部監(jiān)聽父組件的展示、隱藏狀態(tài),從而方便組件內(nèi)部執(zhí)行一些業(yè)務邏輯的處理
組件所在頁面的生命周期有 4 個: show、 hide、 resize、 routeDone,需要在 pageLifetimes 字段內(nèi)進行聲明
Component({
// coding...
// 組件所在頁面的生命周期
pageLifetimes: {
// 監(jiān)聽組件所在的頁面展示(后臺切前臺)狀態(tài)
show () {
console.log('組件所在的頁面被展示')
},
// 監(jiān)聽組件所在的頁面隱藏(前臺切后臺、點擊 tabBar)狀態(tài)
hide () {
console.log('組件所在的頁面被隱藏')
}
}
})
生命周期兩個細節(jié)補充說明
tabBar 頁面之間相互切換,頁面不會被銷毀 點擊左上角,返回上一個頁面,會銷毀當前頁面(被打開頁面)
總結
小程序冷啟動,鉤子函數(shù)執(zhí)行的順序
保留當前頁面(navigate) 以及 關閉當前頁面(redirect)
切后臺 以及 切前臺(熱啟動)
柚子快報激活碼778899分享:java 小程序——生命周期
推薦閱讀
本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。