android疑难问题收集

1.自定义ViewGroup实现折叠展开,离奇的折叠后又展开
  在一个布局里面我参考网络代码实现了一个折叠展开的自定义viewgroup,其实是调用layout方法实现的折叠和展开,最近出现一个bug,就是折叠后它自己又会自动展开,后来打log发现是整个页面的view hierarchy都在执行onLayout,可是为什么会影响这个自定义的viewgroup呢? 难道是因为它的父亲重新layout,又恢复了它的真实宽高吗?那该怎么解决呢?百思不得其解……

答案:layout viewgroup自身,之前一直工作正常,现在跟他一个同级别的viewgroup 有一个手势拖动操作,引起了这个折叠的viewgroup在折叠状态又被展开,我今天晚上,将他们俩的上层relativeLayout自定义了一下,重写onLayout方法,super调用父类的onLayout方法,发现正常情况下,relativeLayout的onLayout方法并没有打印Log;当那个手势拖拽viewgroup拖动的时候触发了他们俩上层的relativeLayout方法的onLayout方法的执行,于是我就将relativeLayout父类的onLayout方法代码复制了过来,加了一个boolean变量,第一次执行,使系统正常执行,onLayout结束后修改boolean变量的值,后续在onLayout方法里面根据id进行判断,当是这个折叠展开viewGroup就不再调用layout,这时候,奇迹出现了,手势拖动的那个同级别viewGroup不再影响了,嘿嘿黑,感谢大佬的回复,解决问题真开心鸣谢:小缘大佬

2.最近使用FrameLayout出现的问题
  FrameLayout里面一个Button,Button设置了backgroud属性为一个图片,一个ImageView设置了src属性,也是一张图片,ImageView位于Button 的上面,也就是堆叠在Button 的上面,可是却发现,ImageView的图片是看不到的,只有Button在显示,ImageView被挡住了,可是如果去掉Button的background属性,ImageView就堆叠在Button上面 了,咋回事呢,FrameLayout里面不都是后面的View堆叠在前面的View上面吗?

3.android手机的状态栏是什么?
  当一个Activity启动,默认情况是有状态栏的,通过获取窗口的宽度和高度发现和手机的分辨率是相同的,难道状态栏也是一个窗口吗?它是叠在activity的window的上面吗?那么activity的window显示内容的时候岂不是要避开状态栏的高度,免得被它遮挡呢?是这样的吗?问题好多……

4.RecyclerView Adapter需要性能优化吗?
  自从RecyclerView出现以后,涌现出了许许多多的第三方封装Adapter,功能十分的强大,我却有一个疑惑至今没有解开,在ListView时代为了提高列表的性能,Adapter的view 在inflate之后保存在convertView的tag中,可是在RecyclerView的adapter中却从未强调过这件事情,这是为什么呢?难道RecyclerView有什么黑科技,不怕重复创建对象带来的性能损耗吗?查看第三方的adapter实现也没有发现对这个问题的处理……

5.Android Studio的R文件在什么地方呢?
至今没看到过

  • 5.1inflater.inflate()三个参数的方法,第三个参数attachToRoot是起什么作用的呢?

JetPack组件

Navigation

单Activity多Fragment项目结构,使用navigation组件发现,在实现fragment页面跳转的时候,其实目标fragment组件也是会产生多个实例的,然而有的时候需求却需要使用原有旧的实例,这个时候,what should I do?

LifeCycle

什么是LifeCycle?LifeCycle存在的意义是啥?

6.关于封装
  之前看到一些封装好的基类,里面定义了抽象方法,在具体方法里面可以调用抽象方法,这个有些吃惊,抽象类竟然可以继承非抽象类,也很吃惊。这样操作后,即可实现,通用操作提取到base类中,非通用操作,通过自类重写抽象方法进行实现,base类负责将自类的实现进行调用,简化代码的编写,真是抽象类的妙用。原来抽象类是这么用的

7.Java的一些别扭的地方
(1)Java接口不可以实例化,可是在代码中你却能看到如

new Runnable(){}

的代码。Java:这不过是创建实现Runnable的匿名类实例而已
(2)Java不支持多继承,却又能看到一个interface继承多个interface
Java:接口是特例,不属于多继承。
8.源代码如何研究和阅读
最近遇见了一个Fragment的问题,在一个Activity页面中,某个布局并不属于这个activity,但是有一个需求是将一个Fragment添加到这个不属于activity的布局里面,然而使用TransactionManager却无论如何都添加不进去,报错是no id for view 0x…报到了FragmentContainer的一个方法里面,到底该如何追踪源码找到具体的错误呢?[苦涩]
  看到许多大佬分析源码的教程,内心非常震撼,说实话,源码就像汪洋大海,如果没有正确的方法很容易迷失在其中,从而丧失继续研究的信心,提纲挈领,理清脉络,不纠结于细枝末节,当需要看某个具体功能的实现,再去看细节,这一点道理很重要,然而明白道理容易,具体做起来,又觉得老虎吃天,无从下口了。还有就是源码的调用跳转流程,有时候感觉分析不太明白,如果能调试起来走一遍,恐怕会更准确,只是系统源码有时候调试跟不进去。[苦涩]2021又快结束了……

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值