微信小程序生命周期(onLoad,onHide,onShow,onReady,onUnload)的坑

2,416 阅读2分钟
转载:https://www.jianshu.com/p/49c153fca075

       在写一个业务逻辑的时候遇到一个问题。。小程序wxml的数据在你返回微信主页的时候是不算退出的,只能算onhide,并且小程序没有给退出小程序的监听方法,之前看文章说用信号量来监测,确实可以实现一部分,但是如果小程序有tabbar的话,,这个方法也不好使。所以我遇到的问题就是,第一次扫码进入一个小程序,刷新出来数据以后,返回微信主界面,再点开这个小程序,首页的数据在不重新请求的情况下,之前绑定的数据就没有了;但是如果你手动刷新出来数据,仍然返回微信主页面,然后再打开这个小程序,在不刷新数据的情况下,上次的数据会保留下来,这就让我很烦恼。。没有数据的小程序。。估计会让人秒删。。然后我从wxml的生命周期找答案

图1

我发现。。在没有杀死微信这个app的情况下。。

  • 第一次打开小程序,以上前3个方法各执行1次,当第一次回到微信主页面的时候onHide,onUnload各执行1次;
  • 第二次打开小程序,以上前3个方法各执行1次,当第二次回到微信主页面的时候onHide执行1次,onUnload不执行;
  • 第三次打开小程序,onLoad,onReady不执行,onShow执行一次;当第三次回到微信主页面的时候onHide执行1次,onUnload不执行;

第四次打开小程序,同第三次

第五次。。。。。同第三次。。。

。。。

也就是说,当小程序执行了onUnload的时候,wxml绑定的数据就会消失,然后再进入小程序才会走onLoad方法

心细的话你会发现第一次退出和第二次退出有什么区别:


图2

第一次打开小程序并退出的话,是下面这个(朋友圈)页面


图3

第2次打开小程序并退出的话,是下面这个(小程序)页面

图4

不要小看这个细节、当是图3的时候,小程序打开是要走onLoad方法的,因为上次关闭的时候走了onUnload方法、当是图4情况的话,就不会走onLoad方法,它的上一次退出也没走onUnload方法、小程序的生命周期发生了挺大变化,当然这个细节大部分业务逻辑不用关心,但是真的用到的时候,不清楚这个知识点可能会多写很多代码,我相信某个时间点你会感激我的,哈哈

tips:所有情况都是针对微信app没有被杀死的情况下讨论的,如果微信这个app被杀死,那小程序自然被杀死