小程序的運行機制、更新機制、生命周期介紹保姆級教程全解

一、小程序運行機制

在這里插入圖片描述

1. 小程序冷啟動

	小程序啟動可以分為兩種情況,一種是冷啟動,一種是熱啟動- 冷啟動:如果用戶首次打開,或小程序銷毀后被用戶再次打開,此時小程序需要重新加載啟動- 熱啟動:如果用戶已經打開過某小程序,然后再一定時間內再次打開該小程序,此時小程序并未被銷毀,只是從后臺狀態進入前臺狀態

2. 前臺和后臺狀態

小程序啟動后,界面被展示給用戶,此時小程序處于【前臺】狀態。
當用戶【關閉】小程序時(通過以下圖片形式 ),并沒有真正被關閉,而是進入了【后臺】狀態,
當用戶再次進入微信并打開小程序,小程序優惠重新進入【前臺】狀態

在這里插入圖片描述

3. 切前臺和切后臺

小程序啟動后,界面被展示給用戶,此時小程序處于【前臺】狀態。
當用戶【關閉】小程序時,小程序并沒有真正被關閉,而是進入了【后臺】狀態,當用戶再次進入微信并打開
小程序,小程序又會重新進入【前臺】狀態

4. 掛起

小程序進入【后臺】狀態一段時間后(5秒),微信停止小程序JS線程執行,小程序進入【掛起】狀態,
當開發者使用了后臺播放音樂、后臺地理位置等能力時,小程序可以再后臺持續運行,不會進入到掛起狀態

5. 銷毀

如果用戶很久沒有使用小程序,或者系統資源緊張,小程序會被銷毀,即完全終止運行。
當小程序進入后臺并被【掛起】后,如果很長時間(目前時30分鐘)都未再次進入前臺,小程序會被銷毀
當小程序占用系統資源過高,可能會被系統銷毀或被微信客戶端主動回收。

二、小程序更新機制

	在訪問小程序時,微信會將小程序代碼包緩存到本地。開發者在發布了新的小程序版本后,微信客戶端會檢查本地緩存的小程序有沒有新版本,并進行小程序代碼包的更新。小程序的更新機制有兩種:啟動時同步更新和啟動時異步更新。

1. 啟動時同步更新

	微信運行時,會定期檢查最近使用的小程序是否有更新,如果有更新,下次小程序啟動時會同步進行更新,更新到最新版本后再次打開小程序,如果用戶長時間未使用小程序時,會強制同步檢查版本更新。

2. 啟動時異步更新

在啟動前沒有發現更新,小程序每次 冷啟動 時,都會異步檢查是否有更新版本。如果發現有新
版本,將會異步下載新版本的代碼包,將新版本的小程序在下一次冷啟動進行使用,當前訪問
使用的依然時本地的舊版本代碼

3. 在啟動異步更新的情況下,如果開發者希望立即進行版本更新,可以使用 wx.getUpdateManager API 進行處理。在有新版本時提示用戶啟動小程序更新版本。

// app.js
App({// 小程序的鉤子函數,這個鉤子函數在冷啟動時會執行到// 當小程序冷啟動時,會自動向微信后臺請求新版本的信息,如果有新版本,會立即進行下載onLaunch(){// 使用 wx.getUpdateManager 方法監聽下載的狀態const updataManager=wx.getUpdateManager()// 當下載完成新版本以后,會觸發 onUpdateReady 回調函數updataManager.onUpdateReady(function(){// 在回調函數中給用戶提示wx.showModal({title: '更新提示',content: '新版本已經準備好,是否重新啟用',success(res){if (res.confirm) {// 強制當前小程序使用新版本并且會重啟當前小程序updataManager.applyUpdate()}}})})}
})

三、小程序生命周期

1. 小程序生命周期介紹

應用生命周期是指應用程序進程從創建到消亡的整個過程
小程序的生命周期指的是 小程序從啟動到銷毀的整個過程。
一個小程序完整的生命周期由 應用生命周期、頁面生命周期和組件生命周期 三部分來組成。
小程序生命周期伴隨著一些函數,這些函數由小程序框架本身提供,被稱為生命周期函數,生命周期函數會
按照順序一次自動觸發調用。
幫助程序員在特定的時機執行特定的操作,輔助程序員完成一些比較復雜的邏輯。

2. 應用生命周期

應用生命周期通常是指一個程序從 啟動--->運行--->銷毀的整個過程
應用生命周期伴隨著一些函數,我們稱為 應用生命周期函數,應用生命周期函數需要 在 app.js文件的App()
方法中進行定義,App()方法必須在app.js中進行調用,主要用來注冊小程序。
應用生命周期函數由 onLaunch 、onShow、onHide 三個函數組成。

在這里插入圖片描述

3. 頁面生命周期

頁面生命周期就是小程序頁面從加載--->運行--->銷毀的整個過程
頁面生命周期函數需要在Page()方法進行定義

在這里插入圖片描述
注意:onLoad 和哦那Ready函數一個頁面只會調用一次

Page({onLoad: function (options) {console.log('onLoad 頁面創建的時候執行')},onReady: function () {console.log('onReady 頁面初次渲染完成時觸發,代表頁面已經準備妥當,可以和視圖層進行交互')},onShow: function () {console.log('onShow 頁面在前臺展示的時候')},onHide: function () {console.log('onHide 當前頁面頁面隱藏')},onUnload: function () {console.log('onUnload 當前頁面頁面被銷毀時觸發')}
})

4.生命周期兩個細節

  • tabBar 頁面之間相互切換,頁面不會被銷毀
  • 點擊左上角,返回上一個頁面,會銷毀當前頁面
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37899.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37899.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37899.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HSP_12章 Python面向對象編程oop_多態

文章目錄 P128 多態問題的引出P129 多態細節和使用1. 多態介紹&特別說明2. 多態的好處3. 特別說明: Python多態的特點4. 使用多態的機制來解決主人喂食物的問題 P128 多態問題的引出 先看一個問題 # 說明: 先試用傳統的方式完成 class Food:name Nonedef __init__(self,…

4.Android逆向協議-詳解二次打包失敗解決方案

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動! 內容參考于:微塵網校 上一個內容:3.Android逆向協議-APP反反編譯及回編譯 工具下載: 鏈接:https://pan.baidu.…

【MyBatis】 - 自定義TypeHandler-數組

在Java中,如果你使用的是MyBatis并需要為String數組自定義TypeHandler,可以按照以下步驟進行操作。TypeHandler用于自定義對象與數據庫字段之間的轉換。 步驟一:創建自定義的TypeHandler 首先,你需要創建一個自定義的TypeHandle…

#筆記# 寫給自己用的小爬蟲

最近完成了一個文旅行業信息聚合的小應用,實現僅從一個入口了解全行業的信息動態,不用一個一個翻看各網站,節省了不少檢索時間。 一、基本思路 明確數據來源。基于前述目標,確定數據源為文化和旅游部管理部門官網,比…

STM32中斷

目錄 stm32中斷原理標準庫高低電平使LED亮滅燈采用串口中斷方式做串口通信 stm32中斷原理 在STM32微控制器中,中斷是一種重要的事件驅動機制,用于處理實時事件而無需持續輪詢。中斷在處理外部事件(如按鍵輸入、定時器溢出等)時非…

【辦公類-21-18】20240701 養老護理員初級選擇題488,制作PyQt5圖形界面GUI

背景需求: 6月16日育嬰師高級考完了。運氣好,抽到的是”護理患腹瀉的幼兒”,“晨檢與家長溝通”,“4個月嬰兒喂蛋黃”,“21個月食譜”,都是我背過的題目(沒有抽到感統) 于是一放假&…

【C語言】解決C語言報錯:Invalid Pointer

文章目錄 簡介什么是Invalid PointerInvalid Pointer的常見原因如何檢測和調試Invalid Pointer解決Invalid Pointer的最佳實踐詳細實例解析示例1:未初始化的指針示例2:已釋放的指針示例3:返回局部變量的指針示例4:野指針 進一步閱…

three.js獲取深度圖

在Three.js中,獲取深度圖(Depth Map)通常涉及幾個步驟。深度圖是一個圖像,其中每個像素的值表示從攝像機到場景中相應點的距離。以下是如何在Three.js中獲取深度圖的基本步驟: 設置WebGLRenderer:確保你的T…

Android裁剪內核后編譯報錯compatibility matrix

【問題描述】: 優化開機速度,裁剪kernel,注釋掉模型模塊后如:# CONFIG_HID_SONY is not set,出現編譯報錯。 checkvintf E 07-01 16:32:02 160 160 check_vintf.cpp:620] files are incompatible: Runtime info a…

《化學工程與裝備》是什么級別的期刊?是正規期刊嗎?能評職稱嗎?

?問題解答 問:《化學工程與裝備》是不是核心期刊? 答:不是,是知網收錄的第一批認定學術期刊。 問:《化學工程與裝備》級別? 答:省級。主管單位:福建石油化工集團有限責任公司 …

昇思25天學習打卡營第6天|網絡構建

網絡構建 概念模型模型參數 概念 神經網絡模型是由神經網絡層和Tensor操作構成的,mindspore.nn提供了常見神經網絡層的實現,在MindSpore中,Cell類是構建所有網絡的基類,也是網絡的基本單元。一個神經網絡模型表示為一個Cell&…

技術革新:如何用數據中臺實現數字化轉型

作為程序員,我們總是對技術如何改變企業運作充滿好奇。今天,我們將深入探討森馬集團如何利用數據中臺技術,實現從傳統數據分析到數字化轉型的華麗轉身。 1. 技術背景:森馬集團的數字化挑戰 森馬集團,一個在服飾行業占…

[單master節點k8s部署]8.pod健康探測

k8s默認的健康檢查機制是,每個容器都有一個監控進程,如果進程退出時返回碼非零,則認為容器發生故障。 存活探測 監測pod是否處于運行狀態,當liveness probe探測失敗的時候,根據重啟策略判斷是否需要重啟。適用于需要…

【Win測試】窗口捕獲的學習筆記

2 辨析筆記 2.1 mss:捕獲屏幕可見區域,不適合捕獲后臺應用 Claude-3.5-Sonnet: MSS庫可以用來捕獲屏幕上可見的內容;然而,如果游戲窗口被其他窗口完全遮擋或最小化,MSS將無法捕獲到被遮擋的游戲窗口內容,而…

天津惠靈頓:從心,致逐夢康橋|在這所天津國際學校從容不迫中走近夢想

在剛剛落下帷幕的申請季中,來自惠靈頓天津校區的Herman,陸續收到了劍橋大學、帝國理工學院、紐約大學、瓦薩學院等10余封錄取通知書。面對紛至沓來的名校肯定,經歷了短暫的塵埃落定的喜悅,Herman很快恢復了往日里的泰然自若。在他…

cv::Mat類的矩陣內容輸出的各種格式的例子

操作系統&#xff1a;ubuntu22.04OpenCV版本&#xff1a;OpenCV4.9IDE:Visual Studio Code編程語言&#xff1a;C11 功能描述 我們可以這樣使用&#xff1a;cv::Mat M(…); cout << M;&#xff0c;直接將矩陣內容輸出到控制臺。 輸出格式支持多種風格&#xff0c;包括O…

第5章:Electron加載與顯示內容(2)

5.4 加載和顯示不同類型的資源 Electron 支持加載和顯示多種類型的資源&#xff0c;包括圖片、視頻和其他靜態文件。 5.4.1 加載圖片的示例代碼 index.html&#xff1a; <!DOCTYPE html> <html> <head><title>Load Image</title> </head&…

字符串常量池StringTable

String s1 "a"; 從常量池中取符號a->運行時常量池 ->"a"放入字符串常量池 -> 給s1 String s2 "b"; String s3 s1s2; 創建 new StringBuilder().append("a").append("b").toString() String s4 "a"&q…

鴻蒙使用 @Builder擴展出來的布局數據更新沒法更新UI

由于業務的復雜&#xff0c;所以我們把相關UI抽離出來。但是數據變化了&#xff0c;沒法更新UI Builder MyGridLayout() { } 通過日志打印發現數據的確是更新了&#xff0c;但是UI就沒沒辦法&#xff0c;如何解決呢 Entry Component struct Page35 {// State sArray: bool…

【ajax實戰09】內容管理頁面——刪除功能

本文章目標&#xff1a;點擊刪除圖標實現對應數據刪除 實現步驟如下&#xff1a; 一&#xff1a;將服務器端獲取數據中數據id值綁定到刪除圖標&#xff08;重點&#xff09; 即在渲染時&#xff0c;利用自定義屬性&#xff0c;為td設置id值 <td data-id "${ele.id}…