小程序 之 “逃不掉的生命周期”之实践

201 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情

通过上文的学习,暂时对生命周期中各个层级的执行顺序有所了解.但还不够,我们需要实践才能更好的理解.

您能在这里看到啥

  1. 查漏补缺
  2. 生命周期实践

查漏补缺

官方资料.我们又发现了一个有趣的流程图.如下所示

截屏2022-12-20 17.17.59.png

很明确的介绍了小程序从启动到最终被销毁,经历的各种状态.从中又了解到冷启动热启动的区别,以及挂起状态.

  • 冷启动

    用户首次打开小程序,或者小程序被销毁后再次打开.此时小程序会重新创建App对象.

  • 热启动

    从上面的流程中,后台->前台、挂起 -> 前台整个过程都称为热启动.此时小程序是没有被销毁的.并且也会执行AppPageonShow方法.

  • 挂起

    是指小程序切换到后台并超过5秒后.微信会停止小程序JS线程的执行.当小程序进入挂起状态后,我们写的事件也不会被挂起.

    如果你想让小程序不被挂起.比如后台播放音乐等功能.您就需要申明需要后台运行的能力.要在app.json中配置requiredBackgroundModes属性.如下所示

    "requiredBackgroundModes":["audio","location"]
    

    由于requiredBackgroundModes是一个数组.我们是可以同时配置多个场景的.

  • 重新启动策略

    可选值含义
    homePage(默认值)如果从这个页面退出小程序,下次将从首页冷启动
    homePageAndLatestPage如果从这个页面退出小程序,下次冷启动后立刻加载这个页面,页面的参数保持不变(不可用于 tab 页)

    求解

    使用官方文档测试后,我确实没有感受到二者的区别.只是知道.会跳转到被杀死前的页面.并且获取上次存的值.但没有感觉到二者的区别.有知道的大佬可以在评论区指点迷津.

生命周期实践

  • 打开小程序的情况

    这里我们直接使用热启动就行.整体看一下AppPage、以及组件的生命周期顺序. 截屏2022-12-20 18.53.00.png

    从上面的事件打印中,我们发现组件的树节点是有限执行的.但布局就是在Page显示完成后.才会执行. 截屏2022-12-20 19.13.51.png

  • 打开界面的情况

    从上面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方法

系列文章

学习资料