android前辈的心得-知识点-各种依赖库-集锦
目录:
1.建议
2.知识点
3.Dagger2使用篇
4.Retrofit+RxJava+OkHttp -封装篇
建议:
(1).使用Gradle和它推荐的工程
(2).密码和敏感数据最好放在gradle.properties中
(3).不要自己写Http客户端,使用Volley或者OkHttp库
(4).使用Fragments来呈现ui视图
(5).使用Activities只是为了来管理Fragments
(6).Layout布局是xmls代码,需要组织好
(7).在layout的xmls布局是,使用styles文件来避免写重复的属性
(8).要使用多个style文件,避免出现单一的大的style文件
(9).保持colors.xml简短,只是定义调色板
(10).不做一个深层次的ViewGroup
(11).只是用WebView的时候避免在客户端做处理,当心内存泄漏
(12).使用Robolectric单元测试,Robotium做ui测试
(13).使用Genymotion作为模拟器
(14).用ProGuard和DexGuard来混淆项目
android SDK
Android sdk 放在home目录或者其他app无关的位置,因为在安卓有些包含SDK的IDE的时候,可能火把SDK放在IDE同一目录下,当年你需要升级或者重新安装的时候,会比较麻烦。如果IDE是普通用户下运行,而不是在root下运行,还需要避免吧SDK放到需要studo权限的系统级别目录下。
Gradle配置
不要在build.gradle中定义sigingConfigs,因为会出现在版本控制中,重新建立一个不加人版本控制系统的gradle.properties文件
使用Maven依赖方式替代使用jar包方案如果项目中明确使用jar文件,那么为了避免成为固定版本,下载jar包来更新很繁琐,可以定义成Maven形式。然后会自动升级到指定的最新版本
Activities and Fragments
实现ui界面的时候,Fragments应该作为默认选择。可以重复使用Fragements用户接口来组合成你的应用,强烈推荐使用Fragments而不是activity来呈现ui界面:
(1)使用多窗格布局解决方案:Fragments的引入主要将手机应用内引申到平板电脑,所以在平板上面可能有A,B两个窗格,但是在手机应用上A.B可能分别充满整个屏幕。所以在起初就用fragments的话,会方便以后的屏幕适配。
(2)屏幕间数据通信:从一个Activity发送复杂数据(例如Java对象)到另外一个Activity,Android的API并没有提供合适的方法。不过使用Fragment,你可以使用 一个activity实例作为这个activity子fragments的通信通道。即使这样比Activity与Activity间的通信好,你也想考虑使用Event Bus架构,使用如 Otto 或者 greenrobot EventBus作为更简洁的实现。 如果你希望避免添加另外一个类库,RxJava同样可以实现一个Event Bus。
(3)Fragments 一般通用的不只有UI:你可以有一个没有界面的fragment作为Activity提供后台工作。 进一步你可以使用这个特性来创建一个fragment 包含改变其它fragment的逻辑 而不是把这个逻辑放在activity中。
(4)ActionBar可以使用内部fragment来管理:你可以选择使用一个没有UI界面的fragment来专门管理ActionBar,或者你可以选择使用在每个Fragment中 添加它自己的action 来作为父Activity的ActionBar.
但是也不能滥用嵌套的fragments,因为可能会引起 matryoshka bugs。在架构一个app框架的时候,应该有一个顶级的activity来包含绝大部分业务相关的fragment。也可以有一些辅助的activity,辅助activity通信可以很简单限制在这两种方法 Intent.setData() 或 Intent.setAction()或类似的方法。
资源文件 Resources
命名 :遵循前缀表面类型的习惯,例如type_foor_bar.xml
组织布局文件:
每一个属性一行,缩进四个空格
android:id作为第一个属性
android:layout_ 属性在上边
style 属性在底部
应该使用styles几乎每个项目都需要适当的使用style文件,因为对于一个视图来说有一个重复的外观是很常见的。
可以将一个大的style文件分割成多个文件 可以有多个styles.xml文件,Android SDK支持其他文件,style这个文件名称并没有起作用,起作用的在文件里的<style>标签。
colors.xml是一个调色板 在你的colors.xml文件中应该只是映射颜色的名称的一个RGBA值,没有其它的。避免重复定义RGBA值,这使如果需要改变基本色变的很复杂。同时,这些定义是更环境关联起来的,如button或者comment,应该放到一个按钮风格中,而不是在color.xml。
避免深层次的视图结构 有时候为了摆放一个视图,可能尝试添加另外一个LinearLayout。
各种dpi的范围Android中的命名规范: 1.包名:使用反域名,全部使用小写字母;2.类:名词,采用大驼峰命名(又称帕斯卡命名法),尽量避免缩写,除非是公认的。如HTML,URL;3.接口:大驼峰命名;4.方法和变量:小驼峰命名法(驼峰命名)5.常量: 全部大写,下划线命名;6.资源文件:全部小写,采用下划线命名法。7.资源布局文件(xml文件)全部小写,采用下划线命名法;8.资源id:小驼峰;9.layout中的id,view缩写_模块名称_view逻辑名称
开发模式(mvc和mvp):
对比MVC和MVP模式来说:mvc模式容易造成Activity或者Fragment里面的代码越来越臃肿。
MVC模式:View:布局的xml文件Controller:Activity、Fragment、Dialog等;Model:相关的业务操作处理数据(如对数据库的操作、对网络等的操作都应该在Model层里)
MVP模式:View:Activity、Fragment、Dialog、Adapter等,该层不包含任何业务逻辑;Presenter:中介,View 与 Model 不发生联系,都通过 Presenter 传递;Model:相关的业务操作处理数据(如对数据库的操作、对网络等的操作都应该在Model层里)
MVP开发模式,便于后期的维护。
在使用第三方依赖库的时候,需要学会封装,抽象的依赖第三方框架。以便于实现低耦合。
知识点:
JAVA反射机制:JAVA反射机制在运行状态中对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,这种动态获取信息以及调用对象方法的功能称为java语言的反射机制。
Dagger2
(1)基于JAVA注解来实现的在完全编译阶段完成依赖注入的开源库,主要用于模块姐解耦,提高代码的健壮性和可维护性。
(2)实现有三种方式 :1、构造注入;2、接口注入;3、注解注入(推荐使用,因为前面两种都需要写大量代码,这一种只需要 “@Inject”即可)
(3)目的:最主要 为了解耦,达到高内聚,低耦合的目的,保证代码的健壮性,灵活性和可维护性。
(4)主要用法:@Inject, @Module, @Provides, @Component, @Qulifier, @Scope, @Singleten
Retrofit+RxJava+OkHttp -封装篇
1.创建一个统一的生成接口实例的管理类
2.创建接口,通过第一步获取实例
3.创建一个业务Loader,如xxxLoader,获取并处理相关业务
4.Activity/Fragment中调用
5.统一处理结果和错误
6.添加公共参数
(Demo:https://github.com/pinguo-zhouwei/RetrofitRxJavaDemo)