9月份Bug解决回顾--Android开发

版权声明:出于感谢(如果有收获)或对知识的尊重,未经允许禁止转载 https://blog.csdn.net/bendan50/article/details/82898773

目录

0、前言

1、三方绑定的粗心大意

1.1Bug之微博绑定失败。

1.2Bug之绑定后立即解绑失败。

1.3Bug之绑定(解绑)后返回A界面,再次回到B界面,之前的绑定(解绑)操作无效(依然显示首次进入B界面的数据)。

2、兼容性问题——android4.0手机的RelativeLayout布局

3、分辨率的坑——来自Demo的代码直接复制


0、前言

我不知道为什么突然这个月开始想起Bug解决回顾,可能是快放十一假期了,或许是比较“闲”(开发阶段性任务完成了),或许是因为我正式接触到了缺陷单,或许,我想坚持下去。不管怎样,我写了。正文开始。

1、三方绑定的粗心大意

需求描述:点击A界面(账号与安全,有手机号和邮箱信息显示)上的“第三方绑定”,跳转到B(第三方绑定)界面,支持微信、QQ、微博。若当前账号绑定了,则在B界面显示“相应昵称”,支持解绑;如果没有绑定,则在B界面显示“未绑定”,支持绑定。

1.1Bug之微博绑定失败。

原因:复制代码粗心,将mWeiboInfo复制成mQQInfo,而没有改过来,造成参数错误。

1.2Bug之绑定后立即解绑失败。

原始流程:初始化界面后,如果没有绑定微信(其他同理),设置绑定标志位为false,否则设为true。影响点击事件时,根据标志位来判断分别走绑定还是解绑流程。

Bug修复后流程:原始流程不变,当绑定(解绑)成功后,在回调中再次设置绑定标志位。即:原始流程中,只在初始化界面时(第一次加载当前账号所绑定的三方信息)对绑定标志位进行赋值。所以,绑定后立即解绑(没有重新进入B界面),原始的绑定标志位的值没有被更新。

1.3Bug之绑定(解绑)后返回A界面,再次回到B界面,之前的绑定(解绑)操作无效(依然显示首次进入B界面的数据)。

原始流程:因为需要向后台请求用户信息(手机号、邮箱、绑定三方信息等),而且A界面需要显示手机号和邮箱,为了减少请求后台次数,跳转B界面时,通过Intent将绑定三方信息传给B界面(通过getIntent获得)。

Bug修复后流程:依然属于数据没有更新的问题,即第二次进入B界面时,用户信息为刚进入A界面时请求获取的,当在B界面操作后返回A界面,用户信息没有重新请求,所以第二次进入B界面是,仍然是首次进入B界面的数据。

解决方案:第一种,使用Activity的生命周期,当A界面回来后请求一次;第二种,每次跳转前请求一次;第三种,在B界面创建时请求一次;

最终方案选择三。额外需要考虑的问题:界面数据更新时间(setContentView的调用时机和代码位置)。

如果在布局完成后直接设置,那么根据请求后的信息来显示“未绑定”或“相应昵称”,则会出现屏幕变动(因为会刷新TextView的值)。所以,应该在请求用户绑定三方信息后再进行设置。

但问题依然存在。请求数据为异步,若请求失败,则回调函数不会被执行(自然不会有显示“未绑定”或“相应昵称”的处理)。这导致setContentView根本无法被执行到,界面白屏。

当请求失败时,弹出Dialog提示用户,然后Handler中进行activity.finish();


2、兼容性问题——android4.0手机的RelativeLayout布局

似乎,android4.0的手机不允许RelativeLayout的嵌套,而高版本不存在。问题原始代码实现:

【【relative-left】【relative-right【textview】【imageview】】】

对应:“手机号”、“136****5625”、“右箭头”

解决:将【relative-right】去掉,不进行嵌套。

【【relative-left】【textview-left_of_imageview】【imageview-right】】

因公司强调信息安全,代码就不贴出来,毕竟该博客的定位是工作中Bug分析总结。其他技术分享时可以,因为技术不涉密。


3、分辨率的坑——来自Demo的代码直接复制

其实,这个不算是什么问题Bug,但它却花费了我半个下午加一个晚上(加班至9点左右)。

需求:显示手机号所属地区的区号,每一个地区为一个Item。

我新建了一个自己的测试工程来完成试验——实际的工程编译运行一次太慢了。设置Item的宽度为match_parent,高度为60;然后在装Item的外部Dialog中设置高度为Util.dp2px(context,45*4);即最多显示4个Item。

问题,就出现在这,我的测试工程中没有进行dp的转换,而实际项目中必须做转换来解决分辨率问题(实际上我做了),但复制代码时,忘记将60改成Util.dp2px(60);

希望复制代码时,记得修改;记得转换单位,来解决分辨率问题。

猜你喜欢

转载自blog.csdn.net/bendan50/article/details/82898773