收藏
回答

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

问题模块 框架类型 问题类型 终端类型 操作系统 微信版本 基础库版本
框架 小程序 Bug 客户端 Android 6.6.5 1.9.97


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

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

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


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

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



最后一次编辑于  2018-04-10  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

5 个回答

  • live
    live
    2018-04-10

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


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

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


    2018-04-10
    赞同
    回复
  • 牛
    2018-04-11

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

    2018-04-11
    赞同
    回复
  • live
    live
    2018-04-11

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

    2018-04-11
    赞同
    回复
  • 李建春
    李建春
    2018-05-09

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

    2018-05-09
    赞同
    回复
  • live
    live
    2018-05-09

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

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

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

    2018-05-09
    赞同
    回复