常用框架 学习笔记
来源:互联网 发布:淘宝怎么删除好评价 编辑:程序博客网 时间: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 (观察者)
Observable 和 Observer 通过 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 通过接口的方式来提供网络上的请求:
- 常用框架 学习笔记
- iOS学习笔记:常用第三方框架
- object-c学习笔记:Foundation框架常用类(一)
- object-c学习笔记:Foundation框架常用类(二)
- PHP MVC框架 视图之常用学习笔记
- 七月算法深度学习笔记4 -- CNN与常用框架
- 分布式服务框架学习笔记2 常用的分布式服务框架 与 通信框架选择
- Java常用框架学习
- spring框架学习笔记
- Struts框架学习笔记
- 框架-Struts2 学习笔记
- adf框架学习笔记
- DXUT框架 学习笔记
- striptes框架学习笔记
- 框架学习笔记
- 框架集合学习笔记
- Spring框架学习笔记
- ci框架学习笔记
- PAT (Basic Level) Practise (中文)1030. 完美数列(25)
- 解决Android Studio编译出来的APK无法安装的问题?
- CMAKE入门
- 欢迎使用CSDN-markdown编辑器
- Java监听器Listener使用详解
- 常用框架 学习笔记
- 成长中每一次低头 都是对自己的肯定
- Git(二):Git分支管理策略
- 【算法导论】贪心算法之活动选择问题
- python 分支循环、列表
- JAVA事件处理机制
- 如何把android中布局文件(.xml)与相关的类(.java)进行关联?
- 电子老鼠闯迷宫
- 计算病人保持正常血压的最长小时数