小程序之坑-iOS与Android端运行逻辑不同?关于全局对象App的变量赋值问题。

问题描述

在开发过程中,有个跳转需求,具体实现需要在article模块,即文章详情页模块,跳转到home模块,即首页模块。在这之中需要带上参数,由于home是属于tabbar配置中的一部分,所以无法用url传参的方式直接传递参数,于是我想到了用获取全局唯一对象getApp()这个方法。 给app赋值上全局变量,然后在home模块获取就行了。

但是问题来了。

本地测试调试通过后,发布到线上(由于是基于扫码跳转小程序,在编辑器只能通过修改编译场景来模拟扫码,实际扫码跳转只能到线上),发现一个奇怪的问题,那就是,在苹果端执行没问题,但是在安卓端会发现参数没有带过去。

解决思路

多次思考,既然代码是一样的,也都是线上的,同时暂时没有听说小程序有什么兼容的问题,只能自己一步步深究。

最终拿同事的安卓机,通过扫描编辑器生成的开发者二维码,模拟线上的场景,成功复现了BUG。那问题就简单了,既然能够复现,于是在各个地方打印了一下app对象的赋值情况信息。

一开始我是只在onLoad内对app对象赋值了一下,我以为全局变量只要赋值一次就够了(实际也应该是这样,苹果端运行没问题),结果在安卓端出了错,于是在onLoad,onShow,onReady都尝试打印赋值情况。

发现

在苹果端

onLoad内成功打印出信息,
onShow内成功打印出信息,
onReady成功打印出信息,
程序运行成功。结果如下:

这里写代码片
这里写图片描述

在安卓端,

onLoad内成功打印出信息,
onShow内成功打印出信息,
但是onReady内打印出的信息为undefined
结果如下:
这里写图片描述

这里写图片描述

于是真相大白,对于某些安卓机型,会存在全局app对象赋值丢失的问题。。

这个问题还挺严重的,有反馈到官方问苹果端与安卓端的执行逻辑是不是不一样,但是没有人回复,只好在这里做一下记录。

找到问题所在后,解决就简单了,只要在最终调用跳转的部分,给app赋值就行了。

以上。祝各位爬坑成功。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值