onShow 生命周期函数,触发过早。

发布于 7 年前作者 jinggu18601 次浏览最后编辑 7 年前来自 ask

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

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

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

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

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

5 回复
fma
fma1 楼6 年前

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

xiuying19
xiuying192 楼6 年前

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

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

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

liren
liren3 楼6 年前

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

dpeng
dpeng4 楼6 年前

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

huming
huming5 楼5 年前

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

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

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