开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情
通过上文的学习,暂时对生命周期中各个层级的执行顺序有所了解.但还不够,我们需要实践才能更好的理解.
您能在这里看到啥
- 查漏补缺
- 生命周期实践
查漏补缺
从官方资料.我们又发现了一个有趣的流程图.如下所示
很明确的介绍了小程序从启动到最终被销毁,经历的各种状态.从中又了解到冷启动和热启动的区别,以及挂起状态.
-
冷启动
用户首次打开小程序,或者小程序被销毁后再次打开.此时小程序会重新创建App对象.
-
热启动
从上面的流程中,
后台->前台、挂起 -> 前台整个过程都称为热启动.此时小程序是没有被销毁的.并且也会执行App和Page的onShow方法. -
挂起
是指小程序切换到后台并超过5秒后.微信会停止小程序JS线程的执行.当小程序进入挂起状态后,我们写的
事件也不会被挂起.如果你想让小程序不被挂起.比如后台播放音乐等功能.您就需要申明需要后台运行的能力.要在
app.json中配置requiredBackgroundModes属性.如下所示"requiredBackgroundModes":["audio","location"]由于
requiredBackgroundModes是一个数组.我们是可以同时配置多个场景的. -
重新启动策略
可选值 含义 homePage (默认值)如果从这个页面退出小程序,下次将从首页冷启动 homePageAndLatestPage 如果从这个页面退出小程序,下次冷启动后立刻加载这个页面,页面的参数保持不变(不可用于 tab 页) 求解
使用官方文档测试后,我确实没有感受到二者的区别.只是知道.会跳转到被杀死前的页面.并且获取上次存的值.但没有感觉到二者的区别.有知道的大佬可以在评论区指点迷津.
生命周期实践
-
打开小程序的情况
这里我们直接使用热启动就行.整体看一下App、Page、以及组件的生命周期顺序.
从上面的事件打印中,我们发现组件的树节点是有限执行的.但布局就是在Page显示完成后.才会执行.
-
打开界面的情况
从上面App启动中,我们可以知道.组件初始事件,是先执行的.那么打开新的Page是和上面差不多的.只是把App替换成Page即可.这里就不再详细的说明了.
从
A->B界面的生命周期(A)onHide -> (B)onLoad -> (B)onShow ->(B)onReady从
B返回到A界面生命周期(B)onUnload -> (A)onShow此时由于B节点被释放.所以onHide是不被执行的.
-
当小程序从后台到前台的生命周期如下
(App)onShow -> (Page)onSHow从事件来说应该是app线程在执行了onShow方法后,通知了page线程,然后执行了onShow方法