dagger2,retrofit,rxjava,okhttp,glide等
Android开发常用框架汇总
http://www.cnblogs.com/angrycode/p/5956704.html
15 个 Android 通用流行框架大全
http://www.oschina.net/news/73836/15-android-general-popular-frameworks
1、RxJava 它就是一个实现异步操作的库
Android 有 AsyncTask或者就直接是Thread+Handler的方式,但RxJava的优势也是简洁。逻辑的简洁,不是单纯的代码量少
Android 开发中点击监听 OnClickListener来说, View是被观察者, OnClickListener是观察者
RxJava 有四个基本概念:Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。Observable和 Observer通过 subscribe()方法实现订阅关系,从而 Observable可以在需要的时候发出事件来通知 Observer。
RxJava最核心的两个东西就是Observables(被观察者,也就是事件源)和Subscribers(观察者),由Observables发出一系列的事件,Subscribers进行订阅接收并进行处理,看起来就好像是设计模式中的观察者模式,但是跟观察者模式不同的地方就在于,如果没有观察者(即Subscribers),Observables是不会发出任何事件的。
迭代器模式在事件处理上采用的是“同步/拉式”的方式,而Observable采用的是“异步/推式”的方式,对于Subscriber(观察者)而言,这种方式会更加灵活。
观察者模式面向的需求是:A 对象(观察者)对 B对象(被观察者)的某种变化高度敏感,需要在 B变化的一瞬间做出反应。
程序的观察者模式和这种真正的『观察』略有不同,观察者不需要时刻盯着被观察者(例如 A不需要每过 2ms就检查一次 B的状态),而是采用注册(Register)或者称为订阅(Subscribe)的方式,告诉被观察者:我需要你的某某状态,你要在它变化的时候通知我。
Android 开发中点击监听 OnClickListener来说, View是被观察者, OnClickListener是观察者. 二者通过 setOnClickListener()方法达成订阅关系。
RxJava 还内置了一个实现了 Observer的抽象类:Subscriber。 Subscriber对 Observer 接口进行了一些扩展(onStart()方法和unsubscribe()方法),但他们的基本使用方式是完全一样的.
要实现异步,则需要用到 RxJava 的另一个概念: Scheduler ——调度器,相当于线程控制器
在不指定线程的情况下, RxJava 遵循的是线程不变的原则,即:在哪个线程调用 subscribe(),就在哪个线程生产事件;在哪个线程生产事件,就在哪个线程消费事件。如果需要切换线程,就需要用到 Scheduler(调度器)
- Schedulers.immediate(): 直接在当前线程运行,相当于不指定线程。这是默认的 Scheduler。
- Schedulers.newThread(): 总是启用新线程,并在新线程执行操作。
- Schedulers.io(): I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler。行为模式和 newThread()差不多,区别在于 io()的内部实现是是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io()比 newThread()更有效率。不要把计算工作放在 io()中,可以避免创建不必要的线程。
- Schedulers.computation(): 计算所使用的 Scheduler。这个计算指的是 CPU密集型计算,即不会被 I/O等操作限制性能的操作,例如图形的计算。这个 Scheduler使用的固定的线程池,大小为 CPU核数。不要把 I/O操作放在 computation()中,否则 I/O 操作的等待时间会浪费 CPU。
- 另外, Android 还有一个专用的 AndroidSchedulers.mainThread(),它指定的操作将在 Android主线程运行。
使用 subscribeOn()和 observeOn()两个方法来对线程进行控制了。 * subscribeOn():指定 subscribe()所发生的线程,即 Observable.OnSubscribe被激活时所处的线程。或者叫做事件产生的线程。 * observeOn():指定 Subscriber 所运行在的线程。或者叫做事件消费的线程。
所谓变换,就是将事件序列中的对象或整个序列进行加工处理,转换成不同的事件或事件序列。
FuncX 和 ActionX的区别在 FuncX包装的是有返回值的方法。
flatMap() 的原理是这样的:1.使用传入的事件对象创建一个 Observable对象;2.并不发送这个 Observable,而是将它激活,于是它开始发送事件;3.每一个创建出来的 Observable发送的事件,都被汇入同一个 Observable,而这个 Observable负责将这些事件统一交给 Subscriber的回调方法。
hrottleFirst(): 在每次事件触发后的一定时间间隔内丢弃新的事件。常用作去抖动过滤,例如按钮的点击监听器
lift() 是针对事件项和事件序列的,而compose()是针对Observable自身进行变换。
通过 observeOn() 的多次调用,程序实现了线程的多次切换。
不过,不同于 observeOn() , subscribeOn() 的位置放在哪里都可以,但它是只能调用一次的。
Observable.doOnSubscribe() 。它和 Subscriber.onStart() 同样是在 subscribe() 调用后而且在事件发送前执行,但区别在于它可以指定线程。默认情况下, doOnSubscribe() 执行在 subscribe() 发生的线程;而如果在 doOnSubscribe() 之后有 subscribeOn() 的话,它将执行在离它最近的 subscribeOn() 所指定的线程。
Retrofit 是 Square的一个著名的网络请求库。
如果可以的话一定要避免在主线程中处理数据库
使用 RxJava形式的 API,定义同样的请求是这样的:
@GET("/user")
public Observable<User> getUser(@Query("userId") String userId);
http://gank.io/post/560e15be2dca930e00da1083#toc_1
基于Retrofit2.0 +RxJava 封装
http://blog.csdn.net/sk719887916/article/details/51958010
RxJava+Retrofit+OkHttp深入浅出
http://blog.csdn.net/column/details/13297.html
说说Retrofit中的注解
http://blog.csdn.net/stven_king/article/details/52372172
使用Rxjava的compose()操作符
http://www.tuicool.com/articles/YrmiQj6
大概主要代码:
okHttpClient=new OkHttpClient.Builder()
.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS).build();
retrofit=new Retrofit.Builder().client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(url).build();
@GET("version/getVersion.mp")
Observable<RespondJson> getNoParamter();
@FormUrlEncoded
@POST("microUserLogin.mp")
Observable<RespondJson> postLogin(@FieldMap Map<String, String> params);
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
2、Android数据库框架——GreenDao
http://blog.csdn.net/qq_26787115/article/details/51811984
http://www.jianshu.com/p/4986100eff90 选择这个用注解的方式
//生成数据库的实体类,版本号,默认java包名等。单独运行这个文件
Schema schema=new Schema(1,"com.student.entity");
Entity entity=schema.addEntity("Student");
new DaoGenerator().generateAll(schema,"D:\\MyApplication\\app\\src\\main\\java-gen");
//生成数据库
helper=new DaoMaster.DevOpenHelper(mContext,DB_NAME,null);
daoMaster=new DaoMaster(helper.getWritableDatabase());
//插入一条数据
daoManager.getDaoSession().insert()
//插入批量数据
daoManager.getDaoSession().runInTx()
//使用sql进行查询
daoManager.getDaoSession().queryRaw()
3、dagger2就是实现依赖注入的一种技术手段
依赖注入(Dependency Injection简称DI)
java注解(Annotation)
依赖注入:就是目标类(目标类需要进行依赖初始化的类,下面都会用目标类一词来指代)中所依赖的其他的类的初始化过程,不是通过手动编码的方式创建,而是通过技术手段可以把其他的类的已经初始化好的实例自动注入到目标类中。
注解(Annotation)来标注目标类中所依赖的其他类,同样用注解来标注所依赖的其他类的构造函数,那注解的名字就叫Inject
Component也是一个注解类,在目标类中所依赖的其他类与其他类的构造函数之间可以起到一个桥梁的作用,叫另外一个名字注入器(Injector)
@Inject 表示这个是需要注入的
@Component 连接器
@Module 是用来生产实例来注入对象的,它类似一个工厂
@Provides 注解表示这个方法是用来创建某个实例对象的