收藏
回答

安卓reLaunch在onShow里面报错 can not invoke

问题模块 API/组件名称 终端类型 微信版本 基础库版本
API和组件 wx.reLaunch 客户端 6.6.1.1220 1.9.2

这是个BUG


我在app.js中的onshow 函数中做了一些逻辑,执行reLaunch方法,在IOS上一点问题没有,在案桌上就报错,can not invoke reLaunch in background  求解?? 又是区别对待咯,请开发大哥们给个明路吧


我不明白的是,既然不能再后台的时候调用,那么onShow里面的代码是在后台执行的?那onShow意义何在?并且IOS机型没有问题,单单是Android机型有问题,这更让我费解。求看到,求关注,求回复,我已经被逼的走投无路了.....  


app.js


onShow () {
// 检测app上次启动时间, 如果和当前日期不匹配, 则清空缓存, 重载数据
 let appLastLaunchTime = util.getStorageData('appLastLaunchTime')
if (util.getNowDateString() !== appLastLaunchTime) {
   util.setStorageData('appLastLaunchTime', util.getNowDateString())
this.reLaunchApp()
}
},


reLaunchApp () {
wx.reLaunch({
url: '/pages/home/home'
 })
},



最后一次编辑于  2018-01-15
回答关注问题邀请回答
收藏

10 个回答

  • Toy
    Toy
    2018-01-17

    @LastLeaf   好的  多谢!


    其实可以开放更多的生命周期 ,比如onRoute, 虽然这个生命周期方法我们这边已经做了个框架已经实现了,当然原生支持就更好了

    2018-01-17
    赞同
    回复
  • 小程序技术专员-LastLeaf
    小程序技术专员-LastLeaf
    2018-01-17

    我们之后会强化这方面的接口,你可以关注一下后续更新。

    2018-01-17
    赞同
    回复
  • Toy
    Toy
    2018-01-17

    还有个问题就是,有些页面的数据时依赖前面页面,所以单单这个页面setData是没用的,最理想的还是要回到首页再去刷新,现在ios倒是没有问题,单单安卓不行... 纠结,我在想想别的办法吧,多谢了

    2018-01-17
    赞同
    回复
  • Toy
    Toy
    2018-01-17

    @LastLeaf   因为我页面比较多,我得在每个页面都要做这个处理, 确实蛮蛋痛的。

    2018-01-17
    赞同
    回复
  • 小程序技术专员-LastLeaf
    小程序技术专员-LastLeaf
    2018-01-17

    置顶的小程序也不会回收


    这种情况是不会的。


    其实你的目的是,有时需要强制更新一下数据?我觉得应该有体验更好的方法,比如重新做一次 setData 来重设页面数据。

    2018-01-17
    赞同
    回复
  • Toy
    Toy
    2018-01-17

    所以是不是我这种情况  暂时无解?

    2018-01-17
    赞同
    回复
  • Toy
    Toy
    2018-01-17

    @LastLeaf   这个还真有的,我反馈过这个问题   同事的IPhone 7 不论啥时候打开小程序都不会刷新,用户中也有一定比例的反馈不会刷新的问题。 于是我才出此下策....


    我看过文档了,说是5分钟的时间,但实际上不是,很多手机根本不会回收。还有置顶的小程序也不会回收

    2018-01-17
    赞同
    回复
  • 小程序技术专员-LastLeaf
    小程序技术专员-LastLeaf
    2018-01-17

    按照设计,小程序只会在后台驻留几分钟的时间,应该不会有一整天都不重启的问题吧?

    2018-01-17
    赞同
    回复
  • Toy
    Toy
    2018-01-17

    @LastLeaf  THX


    我之所以会在onShow里面加reLaunch 就是为了解决有时候 小程序不会被内存回收导致页面的数据一直不会更新 的问题。我的做法是在APP onLaunch记录一个日期到Storage,下次在app onShow的时候拿到当前日期去和上次的时间比对,不是同一天(我们数据一天更新一次)就模拟小程序被回收的场景,关闭所有页面回到首页重新拉取数据。


    于是就碰到了上述问题,那么介于此,我貌似除了放在app onShow去检测,没有更好的办法了..... 不知道在每个页面的onShow去检测会不会有效果。如果这个也不行,真是没辙了,如果大神有更好的方案,不吝赐教!

    2018-01-17
    赞同
    回复
  • 小程序技术专员-LastLeaf
    小程序技术专员-LastLeaf
    2018-01-15

    你好,目前请不要在 onShow 中直接调用 reLaunch 。我们会尝试调整优化一下。


    那么onShow里面的代码是在后台执行的


    是的,目前页面首次 onShow 的时机是紧接着 onLoad 的,它可能出现在页面完全进入之前。

    2018-01-15
    赞同
    回复