W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
小程序啟動后,界面被展示給用戶,此時小程序處于前臺狀態(tài)。
當(dāng)用戶點擊右上角膠囊按鈕關(guān)閉小程序,或者按了設(shè)備 Home 鍵離開微信時,小程序并沒有完全終止運行,而是進入了后臺狀態(tài),小程序還可以運行一小段時間。
當(dāng)用戶再次進入微信或再次打開小程序,小程序又會從后臺進入前臺。但如果用戶很久沒有再進入小程序,或者系統(tǒng)資源緊張,小程序可能被銷毀,即完全終止運行。
這樣,小程序啟動可以分為兩種情況,一種是冷啟動,一種是熱啟動。
通常,只有當(dāng)小程序進入后臺一定時間,或者系統(tǒng)資源占用過高,才會被銷毀。具體而言包括以下幾種情形:
基礎(chǔ)庫 1.1.0 及以上,1.4.0 以下版本: 當(dāng)用戶從掃一掃、轉(zhuǎn)發(fā)等入口(場景值為1007, 1008, 1011, 1025)進入小程序,且沒有置頂小程序的情況下退出,小程序會被銷毀。
用戶打開小程序時,場景可分為以下 A、B 兩類:
A. 保留上次的瀏覽狀態(tài)。場景值有以下幾項:
場景值ID | 說明 |
---|---|
1001 | 發(fā)現(xiàn)欄小程序主入口,「最近使用」列表(基礎(chǔ)庫2.2.4版本起包含「我的小程序」列表) |
1003 | 星標(biāo)小程序列表 |
1023 | 系統(tǒng)桌面小圖標(biāo)打開小程序 |
1038 | 從其他小程序返回小程序 |
1056 | 聊天頂部音樂播放器右上角菜單,打開小程序 |
1080 | 客服會話菜單小程序入口,打開小程序 |
1083 | 公眾號會話菜單小程序入口 ,打開小程序(只有騰訊客服小程序有) |
1089 | 聊天主界面下拉,打開小程序/微信聊天主界面下拉,「最近使用」欄(基礎(chǔ)庫2.2.4版本起包含「我的小程序」欄) |
1090 | 長按小程序右上角菜單,打開小程序 |
1103 | 發(fā)現(xiàn)-小程序主入口我的小程序,打開小程序 |
1104 | 聊天主界面下拉,從我的小程序,打開小程序 |
1113 | 安卓手機負一屏,打開小程序 |
1114 | 安卓手機側(cè)邊欄,打開小程序 |
1117 | 后臺運行小程序的管理頁中,打開小程序 |
B. relaunch 到指定頁或首頁
包括除 A 類外的其他場景
基礎(chǔ)庫 2.8.0 開始支持,低版本需做兼容處理。
小程序被銷毀后,下次冷啟動如果屬于 B 類場景,將會進入特定的頁面。
下次冷啟動如果屬于 A 類場景,默認(rèn)情況下將會進入小程序的首頁。在頁面對應(yīng)的 json 文件中(也可以全局配置在 app.json 的 window 段中),指定 restartStrategy 配置項可以改變這個默認(rèn)的行為,使得從某個頁面退出后,下次 A 類場景的冷啟動可以回到這個頁面。
代碼示例:
{
"restartStrategy": "homePage"
}
restartStrategy 可選值:
可選值 | 含義 |
---|---|
homePage | (默認(rèn)值)如果從這個頁面退出小程序,下次將從首頁冷啟動 |
homePageAndLatestPage | 如果從這個頁面退出小程序,下次冷啟動后立刻加載這個頁面,頁面的參數(shù)保持不變(不可用于 tab 頁) |
注意:即使不配置為 homePage ,小程序如果退出過久(當(dāng)前默認(rèn)一天時間,可以使用退出狀態(tài)來調(diào)整),下次冷啟動時也將不再遵循 restartStrategy 的配置,而是直接從首頁冷啟動。
無論如何,頁面中的狀態(tài)并不會被保留,如輸入框中的文本內(nèi)容、 checkbox 的勾選狀態(tài)等都不會還原。如果需要還原或部分還原,需要利用退出狀態(tài)。
每當(dāng)小程序可能被銷毀之前,頁面回調(diào)函數(shù) onSaveExitState 會被調(diào)用。如果想保留頁面中的狀態(tài),可以在這個回調(diào)函數(shù)中“保存”一些數(shù)據(jù),下次啟動時可以通過 exitState 獲得這些已保存數(shù)據(jù)。
代碼示例:
{
"restartStrategy": "homePageAndLatestPage"
}
Page({
onLoad: function() {
var prevExitState = this.exitState // 嘗試獲得上一次退出前 onSaveExitState 保存的數(shù)據(jù)
if (prevExitState !== undefined) { // 如果是根據(jù) restartStrategy 配置進行的冷啟動,就可以獲取到
prevExitState.myDataField === 'myData'
}
},
onSaveExitState: function() {
var exitState = { myDataField: 'myData' } // 需要保存的數(shù)據(jù)
return {
data: exitState,
expireTimeStamp: Date.now() + 24 * 60 * 60 * 1000 // 超時時刻
}
}
})
onSaveExitState 返回值可以包含兩項:
字段名 | 類型 | 含義 |
---|---|---|
data | Any | 需要保存的數(shù)據(jù)(只能是 JSON 兼容的數(shù)據(jù)) |
expireTimeStamp | Number | 超時時刻,在這個時刻后,保存的數(shù)據(jù)保證一定被丟棄,默認(rèn)為 (當(dāng)前時刻 + 1 天) |
注意事項:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: