小程序页面“被缓存”问题的解决方法

看到 caoz 在公众号文章《小程序的红利期》里提到

“有时候进入小程序,会乱跳一些非目标页面,比如进入某人的语音红包,结果进入的是另一个人的”

这个问题。自己曾今遇到并解决过,可至今仍能在一些颇具影响力的小程序上发现,似乎不少开发者都认定这是小程序的锅了,感觉有必要把这个问题拎出来说说。

现象

如上所述,短时间内进出同一个小程序的不同链接,会打开前一次进入的页面,好像“页面被缓存”或者“数据被缓存”了导致”小程序页面乱入“。手动结束该小程序的后台进程(安卓)或重启微信(iOS、安卓)后,再打开才展示正确的页面。

解决办法

将页面 js 文件中 Page()函数之外的变量都移到 Page() 函数内。

具体到代码


产生原因

小程序没有重启的概念,返回或者点击关闭操作时进入后台,会维持一段时间的运行状态(除非达到触发销毁的条件)。

再次打开的逻辑是清空页面栈进入指定页面,而如果此时小程序处于后台运行的状态,Page()之外声明的变量并未被销毁,如果上一个页面注销前改动过,并且再次进入的页面访问到这个变量,就会把页面状态保持下来出现“页面乱入”的情况。而由于页面栈被清空,Page()整个被销毁了,存在其中的状态也自然不存在了,这就是第二段代码的写法能问题解决的原理。

总结

原理和解决方法并不复杂,理解了小程序的生命周期,也就好办了。所以开发文档前面的基础内容如“框架”部分还是有必要认真看完,切不可看懂“简易教程“就对着 API 文档开干哦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,062评论 25 709
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,429评论 11 349
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,899评论 18 399
  • 人生谁无怨?这不是什么好东西,不论为什么,它的存在压抑心情,干扰生活,让人心里添堵。它存在于我们的生活里,存在于我...
    山水依情阅读 2,548评论 0 1
  • 温故知新,最近更多的是研究和开发各种类库,对设计的是有些感触.以前在大学的时候,虽然知道,但是总归是欠缺经验的,现...
    涅槃1992阅读 4,948评论 4 22