美文网首页
大坑一个

大坑一个

作者: 匿名用户_bcc3 | 来源:发表于2018-12-17 20:57 被阅读0次

需求简单介绍:
提供一个简单的组件,给各个频道使用,其中频道分为原生频道以及RN频道。这个组件的展示逻辑是,先请求一个接口,如果接口返回了数据再去展示。

之前逻辑:
自定义一个ViewGroup,然后创建一个组件ImageView,在接口返回数据之后,通过post(new Runnable)方式去addView(imageView),因为我们访问接口时是在子线程的,所以返回的数据也在子线程,不能直接访问addView。

问题:
原生频道通过new和布局中引用我这个自定义组件都是没有问题的可以正常显示。但是,坑来了,通过ViewManager桥接给RN频道使用时这个imageView总是不显示。

思考方式:
1.首先抓包看接口有没有返回数据,发现接口正常。

2.断点查看是否addView了,addView走了,没有问题。这里坑来了,就是断点放过之后发现imageview显示了,所以我这里就开始怀疑是时间的问题了,需要延时处理,所以子线程post改成postDelay了,结果发现有时候可行有时候不可行。

3.通过Android Tools Layout Inspector查看布局,发现只有自定义的ViewGroup,没有ImageView,这里说明imageView肯定没有add成功了,但是断点的确addView成功了,并且通过执行viewgroup.getChildAt(0)可以拿到imageView。关键的坑又来了,就是打log发现post里总是不执行,断点可以进去。问了同事,同事也没发现啥异常,周日的晚上困得要死,也就没深究。

4.试着将addView从接口中移除来,发现没有问题。

5.上网搜索一下,post不执行,发现了https://www.cnblogs.com/plokmju/p/7481727.html这篇文章,所以猜测是onAttachToWindow还没有执行就调用了addView,所以导致失败。这里说一下,为什么会出现这种情况,就是我们桥接了一个属性给RN,当RN组件加载时,就会调用我们桥接的这个方法,这个方法调用原生的接口请求去addView。那么就有可能出现我们这个组件还没挂在到RN(onAttachToWindow)上,就调用了接口,也就是addView比onAttachToWindow提前。

6.经过验证发现的确是onAttachToWindow没有调用导致,所以将接口请求放到onAttachToWindow中,就没有问题了。

中间当然还有一些别的猜测。

遗留问题:待看。
就是在子线程通过post addView没有效果。回头再看。

相关文章

  • 坑和炕

    吃饭回来的路上,看到一个“大坑烧烤”。 先生说“这是大坑烧烤还是大炕烧炕”。 我,“大坑烧烤”。 先生,“那炕怎么...

  • 大坑一个

    需求简单介绍:提供一个简单的组件,给各个频道使用,其中频道分为原生频道以及RN频道。这个组件的展示逻辑是,先请求一...

  • 你所拥有的最宝贵的财富究竟是什么?

    摘录: 人生三大坑。 第一个大坑叫做“莫名其妙的凑热闹。” 第二个大坑叫做“心急火燎地随大流”。 第三个大坑叫做“...

  • 学习笔记 -CFZYZL--5

    这世上有三个这样的大坑: 第一个大坑,叫“莫名其妙地凑热闹” 第二个大坑,叫“心急火燎地随大流” 第三个大坑,叫“...

  • Appium初探(842)

    Appium环境配置 这是个大坑,是个大坑,个大坑,大坑,坑... 网上的资料大多过时,或者不完整,走了很多弯路。...

  • 大坑

    在我的老家,人们习惯把池塘叫做“坑”,大的池塘就叫“大坑”。村子里面就有一个大坑,到底是什么时候开始有这个大坑的,...

  • 2018届校招 交互设计 记录

    一个大坑,希望早日填好

  • 李笑来-通往财富自由之路-101-注意力

    三个隐性大坑第一个大坑:莫名其妙地凑热闹第二个大坑:心急火燎地随大流第三个大坑:操碎了别人的心肝 钱不是最重要的,...

  • 成长路上我遇到的三个大坑

    在我们成长的路上,会遇到三个大坑,这三个大坑分别是: 放不过自己,放不过别人,放不过命运。 ​第一个大坑——放不过...

  • 【书摘】得到课程|音频版01 | 你拥有的最宝贵的财富是什么?

    2019.4.15-4.16三个隐形大坑是什么呢? 第一个大坑:“莫名其妙地凑热闹”。 第二个大坑:“心急火燎地随...

网友评论

      本文标题:大坑一个

      本文链接:https://www.haomeiwen.com/subject/ekxhkqtx.html