微信小程序 IOS 系统中,倒计时(setInterval 函数)失效的问题

1,685 阅读2分钟
先说结论:挂起(显示在聊天顶部)状态无法完美解决,息屏状态可以完美解决。
本帖目的只是分享在碰到问题时的解决方法和思路。如果不能解决您的问题就非常抱歉。ps:由于小程序一直在更新中,所以并不保证下面的方法长期有效。

息屏状态完美解决方法:
1、适用场景:通过传入参数控制倒计时时间的页面。
2、解决思路:在息屏和挂起的时候,我们可以通过vConsole可以看到是执行了onHide函数。再打开的时候执行的onShow函数,所以我们就可以在onHide函数做文章了。
3、解决方案:实践过后发现在onHide函数中使用setTimeout或者setInterval函数还是不起作用。所以换个方式。
因为我们的页面是通过传入参数控制的倒计时时间, 所以我们在onHide函数内部,redirectTo到当前页面,并将当前页面的剩余倒计时时间传入做为参数传入。由于未知的原因,在息屏状态下进行页面跳转以后,页面的倒计时还是能继续运行(setInterval函数可以运行),这样我们就能在息屏状态下进行倒计时了。而且倒计时时间不会像安卓那样会变慢(仅在iphone6下进行测试)
4、未解决的问题:虽然息屏和挂起都是一样的执行onHide和onShow函数,但是非常遗憾的是,在挂起状态下页面跳转有时会失效(但是神奇的是,会执行success函数)并且就算跳转成功,计时器也还是会暂停,原因未知。

挂起状态非完美解决方法:
1、使用场景:大部分倒计时,但是不适用仅仅setInterval的页面。
2、解决方案: 在开始倒计时的时候获取一下系统当前时间,并加上你的倒计时时间(自行计算)作为结束时间,由上面可以知道再次打开小程序的时候会执行onShow函数,因此只要在这个函数里面根据当前的时间和结束时间再次设置一下倒计时即可。
ps:经过测试发现目前的番茄闹钟就是使用的这种方案。