Android&Java实践总结
1. 心得体会
1.1 线程
写代码时,需要至少考虑两个问题:UI线程与子线程。
UI线程:主要处理UI线程的事情(这不是废话吗?)
子线程:主要做网络连接、回调、文件IO等操作。
备注:UI线程不能够被阻塞,不然会有ANR问题,每一个子线程都是有主线程创建出来的,但不依附主线程,而主线程的对象状态变化与主线程息息相关。
1.2 界面
写代码时,不要贪图方便在xml中用一个ViewPager或者RecyclerView将功能全部整在一起。
应该分清几个界面,以空间还效率,因为你永远不知道你的程序是否满足需求(提前沟通?扯淡去吧)或者说自己是否把异常情况都考虑进去。
1.3 异常情况处理
1、基本功能测试;
2、特殊测试【空指针异常(字符串空)、错误输入:例如、除数0、链表首尾】
3、性能测试【最大最小值测试】
备注:不要贪图方便,不做空指针异常判断与字符串长度为0的判断。(忘了做算法题的严谨了吗?)
1.4 资源回收
尝试使用关键字try、finnally回收socket、文件资源。
1.5 考虑线程安全、同步、锁的问题
同步-安全(同一时间只有一个线程能对数据进行操作),多线程对某个数据进行读写操作时,可进行保护使用锁或者关键字volatile。
关于线程通信:wait、notify与notifyall。
1.6 若遇重复代码,立即想想应该如何避免重复。(showToast)
1.7 若遇需要多次改变的代码,想想能否抽象一个公用的接口,让实现类去具体实现。
比如说图片库picasso、fresco,比如说要将picasso替换成fresco,每个使用到picasso的地方都要改动,一不小心就会改错。
具体解决办法:定义接口,实现类实现接口,工厂类依赖接口实例化实现类。【预留变更,不强耦合于第三方框架】
1.8 显示与逻辑分开
1.9 牢记:单一职责、开放封闭原则、依赖倒转原则、里氏替换原则
1.10 遇到魔鬼数字或者魔鬼字符串,都应该定义为成员变量
好处:避免一处修改,处处修改的问题。万一写少一个零怎么办呢?
1.11 尽量用MVP模式写代码
View:Activity、Fragment、Dialog、Adapter等,该层不包含任何业务逻辑;
Presenter:中介,View 与 Model 不发生联系,都通过 Presenter 传递;
Model:相关的业务操作处理数据(如对数据库的操作、对网络等的操作都应该在Model层里)。
最重要一点:
在需求不清晰的情况下,要去询问。【对于不清楚的知识点,要弄懂到会用,不断完善自己的知识结构、善于提问与主动积极。】