onShow 生命周期函数,触发过早。
发布于 6 年前 作者 jinggu 18436 次浏览 来自 问答

在 Page 的 onShow 生命周期函数中,调用 wx.reLaunch

当小程序已经存在于后台时,会报错 fail can not invoke relaunch in background

解决方案是延时处理,具体延时时间需要取个经验值(比如 100ms),需根据设备性能自行尝试。

我纳闷地是,既然从后台切换至前台的操作还未完成,为什么要触发 APP 的 onShow 和 Page 的 onShow 生命周期函数?

为什么不能等切换操作结束,小程序真的进入前台后再触发 onShow 生命周期函数?

5 回复

onready只触发一次,如果是从后台切回好像不能触发吧。

我在小程序启动,设置一个中间页面为首页,进行页面路由跳转。

这个路由页面,很快就会跳走,可以认为是一次性的,从不会被放入后台。

因此在 onReady 中调用  wx.reLaunch 也能满足业务要求。

你理解的对,onshow是从后台进入前台就会触发,onready是渲染完,具体可看生命周期的流程图

文档中并未说明 onshow 触发时,仅代表即将进入前台。之前根据其命名,猜测是已经进入前台。文档还是欠缺很多细节。

发现在 onReady 生命周期函数中,可调用成功。

估计小程序的 onShow 对应 Android 的 onResume

估计小程序的 onReady 对应 Android 的 onWindowFocusChanged

回到顶部