Android开发经验
个人在开发过程中的一些经验结合
网络上部分博主的经验总结
参考资料:
http://www.jianshu.com/p/4f152bc8f4f3
一、命名规范
(一)包命名
- 根据项目功能模块(如微信中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.csdn.net/vipzjyno1/article/details/23542617
二、应用架构
MVC—>MVP
MVC模式缺点:activity作为Control层耦合过多逻辑、数据处理代码
MVP模式优点:activity作为View层,专注界面交互;方便单元测试,方便协同开发
MVP模式缺点:接口文件过多
详细内容请移步:
http://blog.csdn.net/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…
可参考:http://www.jianshu.com/p/5b7b8af496ba
七、异步回调及线程通信
耗时操作不应该放在主线程操作,如文件读写、网络操作
(一)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实用插件推荐~~
Android开发经验相关推荐
- Android开发经验实战总结
以前一直想写一篇总结 Android 开发经验的文章,估计当时的我还达不到某种水平,所以思路跟不上,下笔又捉襟见肘.近日,思路较为明朗,于是重新操起键盘开始码字一番.先声明一下哈,本人不是大厂的程序猿 ...
- Android开发经验、能力提升
原文出处:http://liuqingwen.me/blog/2017/08/14/translation-of-30-bite-sized-pro-tips-to-become-a-better-a ...
- 【Android开发经验】android:windowSoftInputMode属性具体解释
本文章来自CSDN博客:http://blog.csdn.net/zhaokaiqiang1992.转载请注明地址! 在前面的一篇文章中,简单的介绍了一下怎样实现软键盘不自己主动弹出,使用的方法是设置 ...
- Android开发经验之在图片上随意点击移动文字
只要在图片范围之内,文字可随意点击移动. [java] view plaincopy package xiaosi.GetTextImage; import android.content.Conte ...
- 推测用户行为 程序员分享Android开发经验
从G1上市到现在,市面上已经出现了至少30款Android手机.为什么至今依然有一些用户在抱怨Android不好用,在相关的开发中,什么才是真正值得关注的,开发的核心是什么?为什么移动应用需要格外关注 ...
- 【Android开发经验】Android移动UI设计经验总结
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 1.Android目前的主流设备分辨率为480×800.720×1280.1080×1920,单位是像素.在 ...
- 【Android开发经验】LayoutInflater—— 你可能对它并不了解甚至错误使用
今天,看到了一篇文章讲LayoutInflater的用法,瞬间感觉自己对这个类确实不够了解,于是简单的看了下LayoutInflater类的源代码,对这个类有了新的认识. 首先,LayoutInfla ...
- 盛大资深软件工程师谈Android开发经验
从G1上市到现在,市面上已经出现了至少30款Android手机.为什么至今依然有一些用户在抱怨Android不好用,在相关的开发中,什么才是真正值得关注的,开发的核心是什么?为什么移动应用需要格外关注 ...
- mmkv跨进程,Android开发经验的有效总结,系列篇
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YDtXigXj-1618552640457)(//upload-images.jianshu.io/upload_ima ...
最新文章
- Oracle数据库备份与恢复的三种方法
- oracle+手工创建pfile,oracle 手工创建数据库
- 假设磁盘块与缓冲区大小相同,每个盘块读入缓冲区的时间为10μs,由缓冲区送至用户区的时间是5μs,系统对每个磁盘块数据的处理时间为2μs。若用户需要将大小为10个磁盘块的
- 矩阵乘法如何去逆矩阵_矩阵乘法和求逆
- mysql 触发器 for each row 理解_“for each row”如何在mysql中的触发器中工作?
- Java 按行读写文件(解决中文乱码)
- 如何去掉 Visual Studio源代码 出现 对齐的点点
- pandaboard 安装_pandaboard ES学习之旅——3 Uboot源码下载与编译
- 做科普自媒体是怎么挣钱的?
- 一种基于主板BIOS的身份认证方案及实现
- 用计算机绘制二项分布概率图,二项分布和泊松分布实验.doc
- hualinux 编程概念 3.15:天下武功,唯快不破—新时代敏捷项目管理之道
- 阿里云存储OSS之九大使用技巧
- 亚控科技的KingSCADA多个漏洞
- Linux系统学习方法论 1
- App推广统计代替渠道包统计的方法
- sp01事务码_修复了Server 2003 SP2上的“新事务无法在指定事务协调器中登记”
- android仿美团评论
- Web端编写(四)——查看会议议程
- Java程序设计基础【2】
热门文章
- 企业从哪里开始构建弹性 IT 基础架构
- pandas并发处理数据神器Pandarallel的实战代码
- Topic 14. 临床预测模型之校准曲线 (Calibration curve)
- python矩阵点乘和叉乘_NumPy点积:取向量积的乘积(而不是求和)
- ios阴阳是不显示服务器,阴阳师IOS登录异常怎么办 苹果不能正常登录解决办法...
- 联想小新22H2版跳过联网方法最新方法
- 大数据时代 微软被迫接受开源
- php 保持内容换行符,PHP 将内容写入word pdf 换行符不生效咋办
- 【C++】算法STL库
- arcmap给tif添加地理坐标_如何将JPG格式的图片转化为带地理坐标的TIFF格式