当前位置:网站首页>【微信小程序】運行機制和更新機制
【微信小程序】運行機制和更新機制
2022-07-06 20:33:00 【前端小劉不怕牛牛】
觀眾老爺們好呀,牛牛又更文了,上文我們對部分比較常用的組件進行了講解,作為開發者,我們還需要對小程序的運行機制和更新機制做一定的了解,那問題來了,你對它們了解多少呢?
今天牛牛就帶大家測一測,不了解的還不筆記做起來!

一,運行機制
第一個說明的是小程序的運行機制,小程序從啟動到最終被銷毀,其實會有很多不同的步驟,小程序會經曆多種狀態,大致的運行機制如下圖所示。
接下來我們開始詳細的步驟講解
1.1 小程序的啟動
看上圖,我們知道,小程序首先會有一個冷啟動,簡單講解就是用戶首次打開小程序,或者小程序經過一定時間自動銷毀後被用戶再次打開,這個時候,小程序需要重新加載代碼,重新加載啟動。
這時候可能有小夥伴會問啦,那如果還沒銷毀就再次啟動小程序呢?這個時候就叫做熱啟動啦,平時使用小程序的時候,我們會發現,關閉小程序後不久重新打開,加載的速度比前者快上不少,這就是因為小程序未被銷毀,是從後臺狀態進入前臺狀態,這個過程我們叫做熱啟動,也可以說切前臺。
1.2 小程序前後臺
小程序完成加載之後,會有兩種狀態,分別是前臺狀態和後臺狀態。
- 小程序啟動後,在界面展示出來的時候,該小程序就處於
前臺狀態 - 而當我們關閉小程序時,在一定時間內,小程序並沒有真正關閉也就是銷毀,而是進入所說的
後臺狀態,後臺狀態下小程序依然在運行,只是部分API的使用會受到限制。這裏的操作就是前圖中的切後臺。 - 正常情况下,後臺狀態的時間不會持續很長時間,一小段時間後就會開啟掛起事件,進入掛起狀態(後文解釋)。
- 在銷毀前,用戶再次點擊小程序打開,小程序就會從
後臺狀態或掛起狀態重新進入前臺狀態,這也就是我們前邊說到的熱啟動
1.3 掛起狀態
小程序在後臺狀態呆很短的時間後,就會切換到掛起狀態,在該狀態下,微信會停止該小程序JS線程的執行,小程序的內容狀態會被暫時保留,事件、回調等等在小程序重新進入前臺狀態時才會觸發。
小tip:
- 後臺並不會停止JS線程的執行,如果小程序開啟了後臺音樂播放、地理比特置等功能時,小程序不會從後臺切入掛起,也就是小程序可以持續運行
1.4 小程序銷毀事件
最後一個就是當掛起狀態持續過久(目前是三十分鐘),為了减輕資源緊張,這時候,小程序就會被銷毀啦。
還有一種情况,當小程序占用系統資源過多,也會被系統銷毀或者被微信客戶端主動回收。
在開發中,我們可以用wx.onMemoryWarning監聽內存告警事件,設置內存清理。
二,更新機制
我們知道,微信客戶端會在本地緩存中緩存小程序的代碼,而開發者在管理後臺中會不定時發布更新的新版本小程序,那麼微信客戶端是怎麼知道是否有新版本的呢?
其實微信客戶端會有若幹個時機取檢查本地緩存,如果有新版本,那就進行小程序代碼包的更新,但如果恰巧發布新版本後沒有經過這些時機就打開小程序,那打開可能還會是舊版本的小程序。
下面牛牛來列舉這些檢查更新的時機
2.1 啟動時同步更新
同步更新會影響到小程序的啟動耗時,啟動時並不一定會發生同步更新,以下兩種情况,會在啟動小程序時同步更新。
定期檢查發現新版本
微信在運行的時候,會定期檢查最近使用小程序是否具有新版本,並在下一次啟動小程序時設置是否同步更新用戶長時間未使用
長時間未使用小程序,微信客戶端為了小程序版本迭代正常,會對這些小程序設置啟動時同步更新。
2.2 啟動時异步更新
每次小程序冷啟動時,都會有异步檢查是否有新版本的操作,如果發現新版本,會將新版本代碼進行异步下載,而不影響小程序的運行,不過這也會導致,如果啟動後仍然是舊版本,只有下次啟動,才會打開新版本的小程序。
2.3 開發者手動觸發
微信提供了一個APIwx.getUpdateManager,可以在有新版本時提示用戶重啟小程序更新新版本
三,生命周期
最後就讓我們以生命周期作為今天的結尾吧。
生命周期可以分為程序和頁面兩部分,對於程序,我們首次啟動小程序時,會觸發
onLaunch方法,當我們的小程序初始化完成後,便會觸發onShow方法,頁面加載並顯示,此時觸發顯示頁面的onLoad和onShow方法,成功顯示頁面。首次顯示頁面,還會觸發頁面的
onReady方法,對頁面元素進行渲染,注意,該方法,一個頁面只會調用一次。當小程序切入後臺時,注意,小程序會先觸發頁面的
onHide方法,將頁面隱藏,再觸發程序的onHide方法而當小程序從後臺切入前臺時,小程序會先觸發程序的
onShow方法,再觸發頁面的onShow方法,將頁面顯示。
這裏放上一張網上的圖片便於大家理解
本文到這裏就結束啦,如果覺得對您有幫助的話,可以關注一下牛牛後續的更新,感謝您的支持!
債見~
边栏推荐
- Rhcsa Road
- Anaconda安裝後Jupyter launch 沒反應&網頁打開運行沒執行
- 【微信小程序】运行机制和更新机制
- Database - how to get familiar with hundreds of tables of the project -navicat these unique skills, have you got it? (exclusive experience)
- Introduction of Xia Zhigang
- recyclerview gridlayout 平分中间空白区域
- Groovy基础语法整理
- Special topic of rotor position estimation of permanent magnet synchronous motor -- fundamental wave model and rotor position angle
- 小孩子学什么编程?
- 永磁同步电机转子位置估算专题 —— 基波模型与转子位置角
猜你喜欢

Event center parameter transfer, peer component value transfer method, brother component value transfer

Jupyter launch didn't respond after Anaconda was installed & the web page was opened and ran without execution

"Penalty kick" games

Learn to punch in Web

棋盘左上角到右下角方案数(2)

How to upgrade high value-added links in the textile and clothing industry? APS to help

An East SMS login resurrection installation and deployment tutorial

02 基础入门-数据包拓展

Use of OLED screen

Build your own application based on Google's open source tensorflow object detection API video object recognition system (IV)
随机推荐
use. Net analysis Net talent challenge participation
Catch ball game 1
Database - how to get familiar with hundreds of tables of the project -navicat these unique skills, have you got it? (exclusive experience)
Comment faire une radio personnalisée
Application layer of tcp/ip protocol cluster
【每周一坑】正整数分解质因数 +【解答】计算100以内质数之和
Unity makes AB package
rt-thread i2c 使用教程
[network planning] Chapter 3 data link layer (3) channel division medium access control
How to handle the timeout of golang
Cesium Click to draw a circle (dynamically draw a circle)
Enumeration gets values based on parameters
报错分析~csdn反弹shell报错
APS taps home appliance industry into new growth points
Trends of "software" in robotics Engineering
5. 無線體內納米網:十大“可行嗎?”問題
Minimum cut edge set of undirected graph
Design your security architecture OKR
动态切换数据源
RT thread I2C tutorial