兼容性&低概率&系统问题记录

鸿蒙开发

使用弹窗报错:class constructor cannot called without 'new'

解决办法:

把@Entry

@Component

改成@CustomDialog

并加上

controller: CustomDialogController;

安卓

  1. dialog设置高度MATCH_PARENT全屏后,三星机型和好像是一加,会带出顶部状态栏,设置隐藏状态栏属性无效。

  2. 解决方法:高度不设置为MATCH_PARENT,通过windowmanager.getdefaultdisplay来获取并设置高度,再设置dialog的窗口属性,使状态栏不占位window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

  3. 折叠屏适配

比较多的是折叠展开后,宽度没适配,view展示不全,一般是在onconfigchange回调里面监听宽度变化,然后去重新刷一下ui。

八特有的机型,比如好像是vivo,需要在AndroidManifest.xml里面加screensize,有的时候会收不到监听,比如dialog里面的onconfigchange在息屏时收不到,这个时候如果业务过于复杂还拿不到activity,可以context.registerconfigchange,这样dialog的onconfigchange就能收到了。还有如果这个时候直接去拿屏幕宽度也可能拿不准的,最好用onconfigchange回调的宽度,这个回调的是px单位的宽度。

  1. 荣耀机型繁体字的逗号会自动居中。已知问题,无需解决。

  2. 连续出来2个dialog,有个dialog会多出一截白色view。解决方法:只弹一个

  3. 业务bug01:想使用drawerlayout,但是发现在页面上无法侧滑出来,因为drawerlayout有个长按屏幕编译可以出来抽屉然后可拖拽出抽屉的属性,尝试修改它的感知区域,修改后发现drawerlayout拦截的是整个页面的事件。。。尝试页面diapatch处拦截事件给drawerlayout失败,因为无法判断页面内部是否有其他滚动的子view,安卓的apid不中啊。后面尝试使用viewpager实现drawerlayout的效果,因为层级放得不对,切到有的业务后那些业务直接把左右滑事件吃掉以后没有恢复导致侧滑功能再失效。后面从业务角度换了一个层级解决。

  4. 业务bug02-超低概率:页面上可见的appid与系统最高的appid不一致,导致startactivity出问题,业务bug。未解决

  5. 业务bug03-超低概率:使用fragment时,使用commitAllowingStateLoss去创建替换fragment,正常是oncreate->ui创建与加载->ondestroy。出问题的时候是oncreate->ondestroy->ui创建与加载,view创建时通过context拿不到资源或者view.xxx失败闪退,然后被线上检测到异常闪退。推测是commitAllowingStateLoss导致,可以尝试使用commit修复。该问题,未解决

  6. 业务bug04-特定场景必现bug:空传参导致程序崩溃,该场景正好是退出一个进程的页面加上又被try catch住了所以事情发生的没有闪退或其他异常表现,只是再进页面的时候是空白的一个页面,再次进页面的时候进程重启+页面重新创建所以没看出什么问题,只能看到页面没创建出来,然后发生问题的地方出现在一个线程池里面。。。线程池链接到了下一个进程的页面创建的地方,出现整个页面渲染不出来的问题。解决方法:缓存时给个默认值减少空值发生,再加个判空,概率低了很多,不过还是有超超超低概率出现页面渲染失败空白的问题。

  7. ViewPager2。常用的无限循环,一般处理方式就是getItemNumber的时候返回一个Integer.MAX,达到无限循环的目的,如果是一页一页翻过去的那没啥问题,如果是scrollto某一页,中间跨度很大很大,比如差了几十个item,那么就会肉眼可见的卡顿,原因:scrollto的时候会拿总列表数去生成东西,这个时候会造成内存抖动,解决方法不使用Integer.MAX,getItemNumber设置成比较大的数字即可,比如10000啥的。

其他

  1. ios os16以下,识别链接时汉字为黑色方块。解决方法:直接干掉链接中的汉字。或者尝试编码后再识别链接。

  2. uniapp,url跳转失败,链接过长导致,干掉一些携参。古早问题,不知道现在还有问题没。

  3. 鸿蒙。 不能instanceof接口。解决方法,使用父类或者判断这个接口的特定方法是否存在。

  4. 依然鸿蒙,如果静态方法里面裹静态方法,静态方法里面用到了子类,这个时候会报父类没有构造,然后运行白屏。解决方法,这段代码变成普通方法,不要用static修饰。

  5. 依然鸿蒙,listdatasource数据改变时通过for循环数据通知到ui渲染,但是比如有一个length=5的数组,循环到了index=2、3就没有继续循环下去了,无异常发生,列表view展示不全,只能展示1、2、3个view,后面发现是重复渲染,应该是循环上了,再ondisappear的时候把该业务标志位置为默认值即可。

  6. 依然鸿蒙,grid拖拽补位组件,如果用了lazyforeach,拖拽回调的接口index是乱的,导致删除的不是预期的item。不用lazyforeach,列表数量太大时,比如超过80个item,拖拽明显卡顿。解决方法:根据官网lazyforeach的计算算法,反推出正常的index,但是我没试哈。后面应该是限定了展示数据最多不超过多少个。未解决

  7. 公司跨端组件,动态计算css样式的动画,如果反复进退页面展示这个动画,安卓端会明显的这个动画越来越卡,最后闪退,可能是框架的动画或者native没有反注册该跨端组件导致的内存泄漏,未解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值