常用框架 学习笔记

来源:互联网 发布:淘宝怎么删除好评价 编辑:程序博客网 时间:2024/06/06 01:41

Glide: 图片加载

Gradle添加依赖:compile ‘com.github.bumptech.glide:glide:3.7.0’

先with(),再load(),最后into():

Glide.with( activity或fragment等 ).load( 资源,如File、url、 本地图片、应用资源、二进制流、Uri对象 等 可以加载GIF!!).into( 如ImageView实例 );

其他方法:(在load()与into()之间!!!)

.placeholder(R.drawable.loading)//加载中的图片.diskCacheStrategy(DiskCacheStrategy.NONE)//禁止缓存(Glide拥有强大的缓存功能).error(R.drawable.error)//出错的时候加载.override(100, 100)//压缩图片尺寸,防止OOM待补充

整理自:http://www.imooc.com/article/20745


RxJava: 基于观察者模式的异步处理框架:

(类似于AsyncTask / Handler )随着程序逻辑变得越来越复杂,它依然能够保持简洁。

在Flipboard 的 Android 代码中,有一段逻辑非常复杂,包含了多次内存操作、本地文件操作和网络操作,对象分分合合,线程间相互配合相互等待,一会儿排成人字,一会儿排成一字。如果使用常规的方法来实现,肯定是要写得欲仙欲死,然而在使用 RxJava 的情况下,依然只是一条链式调用就完成了。它很长,但很清晰。

关于观察者模式: Observable(被观察者)- subscribe (订阅) - Event(事件) - Observer (观察者)

ObservableObserver 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。

1 . Observer 它决定事件触发的时候将有怎样的行为。

Subscriber对 Observer 接口进行了一些扩展,但他们的基本使用方式是完全一样的

Observer<String> observer = new Observer<String>() {    @Override    public void onNext(String s) {        Log.d(tag, "Item: " + s);    }    @Override    public void onCompleted() {        Log.d(tag, "Completed!");    }    @Override    public void onError(Throwable e) {        Log.d(tag, "Error!");    }};

与传统观察者模式不同, RxJava 的事件回调方法除了普通事件 onNext() (相当于 onClick() / onEvent())之外,还定义了两个特殊的事件:onCompleted() 和 onError()。

  • 当不会再有新的 onNext() 发出时,需要触发 onCompleted() 方法作为标志。
  • 事件队列异常。在事件处理过程中出异常时,onError() 会被触发,同时队列自动终止,不允许再有事件发出。

2 . Observable 它决定什么时候触发事件以及触发怎样的事件。

全部摘自:http://gank.io/post/560e15be2dca930e00da1083

Observable observable = Observable.create(new Observable.OnSubscribe<String>() {    @Override    public void call(Subscriber<? super String> subscriber) {        subscriber.onNext("Hello");        subscriber.onNext("Hi");        subscriber.onNext("Aloha");        subscriber.onCompleted();    }});
  • 这里传入了一个 OnSubscribe 对象作为参数。OnSubscribe 会被存储在返回的 Observable 对象中,它的作用相当于一个计划表,当 Observable 被订阅的时候,OnSubscribe 的 call() 方法会自动被调用,事件序列就会依照设定依次触发(对于上面的代码,就是观察者Subscriber 将会被调用三次 onNext() 和一次 onCompleted())。这样,由被观察者调用了观察者的回调方法,就实现了由被观察者向观察者的事件传递,即观察者模式。

  • create() 方法是 RxJava 最基本的创造事件序列的方法。基于这个方法, RxJava 还提供了一些方法用来快捷创建事件队列,例如:

Observable.just("Hello", "Hi", "Aloha");//直接传入参数Observable.from(T[]);//传入的数组

关系图

3 . subscribe:

创建了 Observable 和 Observer 之后,再调用 subscribe() ,事件即被触发。

observable.subscribe(observer);

该方法返回observer传入的subscriber,为了方便 unsubscribe()的调用:(使用observer会默认转为subscriber再使用)

unsubscribe(): 这是 Subscriber 所实现的另一个接口 Subscription 的方法,用于取消订阅。在这个方法被调用后,Subscriber 将不再接收事件。一般在这个方法调用前,可以使用 isUnsubscribed() 先判断一下状态。 unsubscribe() 这个方法很重要,因为在 subscribe() 之后, Observable 会持有 Subscriber 的引用,这个引用如果不能及时被释放,将有内存泄露的风险。所以最好保持一个原则:要在不再使用的时候尽快在合适的地方(例如 onPause() onStop() 等方法中)调用 unsubscribe() 来解除引用关系,以避免内存泄露的发生。

关于Action1 和 Action0的使用:

//Action1有一个泛型参数,可作为onNext()与onError()使用Action1<String> onNextAction = new Action1<String>() {    // onNext()    @Override    public void call(String s) {        Log.d(tag, s);    }};Action1<Throwable> onErrorAction = new Action1<Throwable>() {    // onError()    @Override    public void call(Throwable throwable) {        // Error handling    }};//Action0没有参数Action0 onCompletedAction = new Action0() {    // onCompleted()    @Override    public void call() {        Log.d(tag, "completed");    }};// 自动创建 Subscriber ,并使用 onNextAction 来定义 onNext()observable.subscribe(onNextAction);// 自动创建 Subscriber ,并使用 onNextAction 和 onErrorAction 来定义 onNext() 和 onError()observable.subscribe(onNextAction, onErrorAction);// 自动创建 Subscriber ,并使用 onNextAction、 onErrorAction 和 onCompletedAction 来定义 onNext()、 onError() 和 onCompleted()observable.subscribe(onNextAction, onErrorAction, onCompletedAction);

4 . Scheduler ——调度器

然而 Observable.subscribe(Observer) 默认执行在同一线程 ,如果需要切换线程,就需要用到 Scheduler (调度器)。
使用 subscribeOn() 和 observeOn(): 前者为事件发生的线程,后者为处理事件执行的线程(通常为主线程)。

几个API:

  • Schedulers.immediate(): 默认,当前线程
  • Schedulers.newThread() : 新的线程
  • Schedulers.io() : 一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率(加载图片、读写文件、读写数据库、网络信息交互等)
  • AndroidSchedulers.mainThread() : 安卓主线程

如:

  Observable  .subscribeOn(Schedulers.newThread())  .observeOn(AndroidSchedulers.mainThread())  .subscribe(Observer) ;

5 . 变换

.map()

Retrofit: HTTP网络/数据传输框架:

Gradle 添加依赖:

// retrofit2compile 'com.squareup.retrofit2:retrofit:2.0.2'//配合使用的rxJavacompile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'//可能用到的json框架compile 'com.squareup.retrofit2:converter-gson:2.0.2'// network interceptorcompile 'com.squareup.okhttp3:logging-interceptor:3.1.2'

retrofit 通过接口的方式来提供网络上的请求:

原创粉丝点击