赞
踩
最近准备梳理一下
Kotlin
,先复习一遍RxJava
思想,做个学习笔记+伪代码,整个脉络分为三个部分。
RxJava
是重量级、最复杂的框架(没有之一),JakeWharton 的巅峰之作,操作符非常丰富、特别庞大,学关键的内容,学思维方式,看PPT资料,学两遍。
改变思维(Rx思维)来提升效率,响应式编程/异步事件流编程
Rx思维:起点(分发事件)—>…—>终点(消费事件),中间不会断掉且可以做拦截,链条式思维
思维扩展:Rx系列
【以下五部分难度逐步提升!!!】
传统思维:不同项目(程序员)实现有不同的思路,封装、Thread、线程池……
dialog—>Thread
/AsyncTask
/…—>Handler
—>UI
Rx思维/卡片式编程/观察者设计模式:
起点/被观察者/Observable—>订阅—>终点/观察者/Observer
封装线程调度,方便多处使用线程切换:
// 封装线程调度,UD:upstram/downloadstream private final static <UD> ObservableTransformer<UD, UD> rxud { return new ObservableTransformer<UD, UD>(){ @override public ObservableSource<UD> apply(Observable<UD> upstream){ // 方法返回自己this,链式调用无限扩展,可以继续作死的调用 return upstream.subscribeOn(Schedulers.io())//给上层分配异步线程 .observerOn(AndroidSchedulers.mainThread())// 给下层分配主线程 .map(new Function<UD, UD>(){ Log.d(TAG, "balabala..."); return null; }); } } }
事件触发:
public void reJavaDownloadImageAction(View view){ Observable.just(PATH)// ②起点 .map(new Function<String, Bitmap>(){ // ③卡片式拦截 ...// 请求服务器下载图片操作 return bitmap; }) .map(new Function<Bitmap, Bitmap>(){ // +需求:水印 ...// 加水印操作 return newBitmap; }) .map(new Function<Bitmap, Bitmap>(){ // +需求:日志 Log.d(TAG, "balabala...");// Log return newBitmap; }) // 线程调度 //.subscribeOn(Schedulers.io()) //.observerOn(AndroidSchedulers.mainThread()) .compose(rxud())// 可以抽取封装起来 .subscribe(// 订阅,上层区域和下层区域 new Observer<Bitmap>() { // 终点 onSubScribe(Disposable d)// ①订阅开始,预备操作 onNext(Bitmap bitmap){ // ④拿到事件,和起点类型一致 image.setImageBitmap(bitmap); } onError(Throwable e)// 错误事件 onComplete()// ⑤完成事件 } ); }
RxJava
配合Retrofit
(常用⭐⭐)常用的网络模型框架开发组合套装:
Retrofit
(通过OkHttp
请求网络)—>RxJava
(仅处理返回数据)—>UI
注:Retrofit
不是网络框架,是个强大的封装框架,负责管理
网络请求接口
interface WanAndroidApi{
// 异步线程,耗时操作
// 总数据
@GET("project/tree/json")
Observable<ProjectBean> getProject();
// Item数据
//@GET("project/list/1/json?cid=294")
@GET("project/list/{pageIndex}/json")// 使用注解动态传参
Observable<ProjectItem> getProject(@Path("pageIndex")int pageIndex, @Query("cid")int cid);
}
具体工具类封装:
HttpUtil { public static String BASE_URL="https://www.wanandroid.com/"; public static void setBaseUrl(String baseUrl) { BASE_URL = baseUrl; } // 根据各种配置创建出Retrofit public static Retrofit getOnlineCookieRetrofit() { // OkHttp客户端 OkHttpClient.Builder httpBuilder = new OkHttpClient.Builder(); HttpLoggingInterceptor logInterceptor = new HttpLoggingInterceptor(new HttpLogger()); logInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient okHttpClient = httpBuilder .addInterceptor(logInterceptor) .addNetworkInterceptor(new StethoInterceptor()) .readTimeout(1000, TimeUnit.SECONDS) .connectTimeout(1000, TimeUnit.SECONDS) .writeTimeout(1000, TimeUnit.SECONDS) .build(); return new Retrofit.Builder().baseUrl(BASE_URL) // step1:请求用OkHttp .client(okHttpClient) // step2
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。