项目中曾经出现的一些bug以及以后要注意的一些问题

项目快做完了,稍微总结一下遇到的一些bug,看着是小问题,但是真遇上的时候还是有些懵逼。

  1. 项目中有这样一个需求,点击一项,弹出有两个选项的dialog。点击dialog中的一项,进入到一个界面,在这个界面中点击回退时,dialog没有dismiss,多次点击还会有死屏,导致无法点击。
    出现原因:把dialog的创建与显示封装在同一个方法了,每次调用都是重新创建,而且dismiss放置位置不对,也没有及时finish当前activity
    解决方法:写一个setDialog和showDialog方法,在onCreate方法中setDialog并通过buidle对象创建一个dialog,在需要的地方调用showDialog,setDialog与showDialog分开写,而不是写在一起,这样可以避免每次使用dialog都去new一个dialog,维护一个可以节省空间,最好的方法也可以写成工具类,在调用dismiss后finish掉当前界面

这里写图片描述

定义setDialog和showDialog方法,setDialog做dialog的初始化操作,showDialog直接调用show()方法,注意这里的show方法,是要通过buidle对象调用create()方法返回一个dialog对象,通过这个对象调用show方法。

这里写图片描述

在onCreate()方法中调用setDialog方法,第一个红色框中的第三行代码就是上面所说的通过build对象创建dialog对象。
第二个红色框就是在需要的地方直接调用showDialog方法,这样全局就维护一个dialog,节省内存也不易出错

这里写图片描述

调用完隐藏当前dialog并且finish掉当前activity(为了解决从下个界面返回dialog没消失,而且多次点击会死屏问题),我这里使用的是hide而不是dismiss

dismiss和hide方法都可以隐藏对话框,在需要的时候也可以用show方法调用显示。但是,这两者是有区别的。
dismiss方法会释放对话框所占的资源,而hide方法不会。activity退出前必须调用dismiss方法关闭对话框。
如果对话框上有progressbar,你会发现,调用dismiss方法后,再调用show方法,出来的对话框,上面的progressbar不再会转动,而调用hide方法的则没有问题。
所以,最正确的调用方法是,在activity的onDestory方法里调用dismiss方法,其他地方都用hide方法隐藏对话框。

这里写图片描述

在onDestroy方法中释放资源,调用dismiss并置空,调用dismiss已经会释放了,我这里置空有点多余,但是是为了保险。

2,多次跳转activity,没有finish,导致多次按back键会重复出现界面
对于不需要的界面,要及时finish,并且考虑存储关系,分析内存

3,fragment与fragment和fragment与activiity之间的传值

可以通过实体类进行传值,把实体类写入(setArguments)到fragment中通过activitiy调度(getArguments),在fragment中获取
更多关于fragment与activity之间的交互可以参考

http://www.jianshu.com/p/662c46cd3b5f

4,数据的处理,比如集中处理从服务器请求到的数据和本地数据

获取到本地数据和网络数据,同时都为集合或者数组的形式呈现,最后通过for循环一起写入到新集合中,开发中数据处理能力是一种很重要的能力,这点自己做的还不够,对数据的获取与传递,特别是多模块之间的传值,理解的还不够。

5,动态添加listview,并获取到子项中的值,其中不能很好地处理适配器中的数据,会出现执行顺序并不是代码顺序

这种错误是异步操作导致,前段代码还没执行完还没有获取到数据,就执行到后面的代码了,当获取到值得时候,已经晚了。

针对这种情况,我有两种做法,一种是在获取的地方使用延迟获取,确保在获取的时候前段异步方法已经执行完,并且已经有值了;
第二种,在判断执行的数据不为空才执行获取操作

6,错误的使用控件去存储数据而不是基本数据类型或者其他可序列化的实体类。

7,从A界面得到输入的数据并携带数据跳转到B界面,再从B界面返回A界面修改数据,跳转回B界面,数据修改失败

在提交的时候从新获取新数据

第一次获取
这里写图片描述

第重新获取到修改的值
这里写图片描述

把重新获取的值提交
这里写图片描述

8,注意内存的回收,定义接口时,多定义一个onDestory方法,在不需要的时候把数据对象及时回收

9,没插手机卡的手机无法定位

没有解决,应该是百度定位sdk是根据手机卡的某个配置来进行定位的,这个还不清楚。

10,代码要规范,要严格遵循权限规则,命名规则,注释规范以及模块分

层等,

11,通用资源要先写好,有助于提高效率和统一

12,先想思路在敲代码,而不是后面频繁的修改,思想是工程师的灵魂
…….

目前先记录这么多,以后发现再继续追加……

虽然项目做完了,但是感觉并没有从项目中学到太多的东西,恰恰相反,不会的倒是越来越多,可能真的如人所说,如果一个人觉得自己不会的东西越来越多,说明她的眼界与层次在不断提升。只有知道自己哪些东西还不懂才不会自满,才能更踏实的学习。跳出井底,看到更广阔的世界。

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值