个人在开发过程中的一些经验结合
网络上部分博主的经验总结
参考资料:
一、命名规范
(一)包命名
- 根据项目功能模块(如微信中found、me等)
- 根据Android模块(不是指程序功能,而是指UI,http,bean这些功能)
- 两者结合,如下♂
com.mesada.demo
|-activity
| |-user
| |-login
|-fragment
| |–user
| |–login
参考博文:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0612/4347.html
(二)类命名
类 | 例如 |
---|---|
Activity | WelcomeActivity、LoginActivity |
Fragment | FoundFragment、MeFragment |
Service | TimeService |
BroadcastReceive | WifiBroadcast |
(三)变量命名
采用小驼峰方式
命名模式为:逻辑名称+view缩写
全局变量
例如:mLoginBtn、mRecordRly局部变量,不加m
(四)layout布局文件
命名模式为:activity_功能模块.xml
例如:activity_main.xml
(五)layout中的id命名
命名模式为:view缩写_模块名称_view的逻辑名称
例如:android:+id = @id/btn_loginactivity_login
参考资料:http://blog.youkuaiyun.com/vipzjyno1/article/details/23542617
二、应用架构
MVC—>MVP
MVC模式缺点:activity作为Control层耦合过多逻辑、数据处理代码
MVP模式优点:activity作为View层,专注界面交互;方便单元测试,方便协同开发
MVP模式缺点:接口文件过多
详细内容请移步:
http://blog.youkuaiyun.com/lmj623565791/article/details/46596109#comments
三、选好第三方框架
- 网络访问:okhttp、retrofit、android-async-http、volley
- 图片下载:Android-Universal-Image-Loader、Glide、Fresco、Picasso
- 缓存框架:DiskLruCache、Robospice、ACache
- Json解析框架:Gson、Fastjson、Jackson
- 事件总线:EventBus、Rxjava
二维码:zXing
第三方分享:友盟分享
- 数据统计:友盟统计
- 地图:百度地图、高德地图
- 推送:百度推送、极光推送
- 及时通信IM:环信、融云
四、抽象依赖第三方框架
选择好了框架千万不要拿来就用,因为再好的框架也有它局限的地方,当然你也可以简单的在遇到这个框架不能实现的时候,添加另外一种框架,只是这样项目会越来越大,对于APP来说APK也越来越大,65535 的问题也会提前出现,所以为了方便以后有可能出现的切换框架,以及防止初期对框架使用不熟悉而引发出新的bug,在选择好了框架后,一定要对框架进行二次封装,当然有些框架是不需要二次封装的,比如前面说的单一性的框架Butterknife或PreIOC,但是像UniversalImageLoader、OKHttp等框架,必须要进行二次封装,至于封装原则,则是封装后,调用框架对于调用代码来说是透明的,简单来说,就是对于框架调用都通过一个统一的入口进入,并且调用时,不需要传入任何跟框架相关的东西,如果必须要传入接口,可以通过继承框架来实现新的接口传入,这样在真正的使用框架的地方,没有任何关于框架的引用
封装抽象的好处
之所以要这样封装,最大的好处就是一旦框架不能满足需求时,需要进行框架更换时,只需要换掉框架,同时修改统一入口处的代码,就能快速的替换整个框架,避免强耦合!
五、屏幕适配
content
(一)普通界面适配方案
参考hongyang适配系列博客
包括:
1、weight的使用
2、定义不同分辨率对应的dp-px
3、使用sdk自带的百分比布局
.
.
.
(二)自定义控件及适配
在自定义控件的开发过程中,宽度单位、文字大小都是使用的像素px,那就会出现适配问题!!!
如何解决:
1、控件长宽通过属性设定
2、控件内部画笔图像等长宽基于控件长宽 or 基于屏幕长宽
3、文字大小基于控件长宽 or 基于屏幕长宽
六、项目调试及运行时异常处理
根据我两年填坑经验来看,程序猿的日常工作大部分就是改改改Bug!
(一)锁定Bug
- 最基本的log调试(不缀叙)
- eclipse断点调试
(二)运行时异常导致的Bug
运行时异常主要有:
- NullPointerException(空指针)
- ClassCastException(类转换异常)
- IndexOutOfBoundsException(数组越界)
开发中最为常见的当属Null异常!
解决方法:多做空判断、防患于未然、易出异常出try…catch…
七、异步回调及线程通信
耗时操作不应该放在主线程操作,如文件读写、网络操作
(一)handler及Asynctask知识
content
(二)事件总线—EventBus/Rxjava
content
八、内存优化
content
(一)内存泄漏
1)内存泄漏检测
https://github.com/square/leakcanary
2)内存泄漏的原因
handler导致的内存泄漏
内部类导致的内存泄漏
3)如何避免内存泄漏
使用弱引用
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1123/2047.html
(二)内存溢出
内存溢出的原因
bitmap没有压缩、没有释放
bitmap的压缩方法:
九、工具及IDE插件使用
(一)工具
网络抓包工具—Fiddler4
模拟请求—PostMan
校验Json数据合法性—http://www.kjson.com/
通过Json字符串快速转换成实体类Bean
程序猿必备翻墙工具—蓝灯
项目管理—Svn、Git
(二)IDE插件
~~Android Studio实用插件推荐~~