当前位置:   article > 正文

Android中的RxJava_android rxjava

android rxjava

最近准备梳理一下Kotlin,先复习一遍RxJava思想,做个学习笔记+伪代码,整个脉络分为三个部分。

(一)使用场景

RxJava是重量级、最复杂的框架(没有之一),JakeWharton 的巅峰之作,操作符非常丰富、特别庞大,学关键的内容,学思维方式,看PPT资料,学两遍。

为什么要学习RxJava

改变思维(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;
				});
		}
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

事件触发:

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()// ⑤完成事件
			}
		);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

二、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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

具体工具类封装:

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࿱
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/300708
推荐阅读
相关标签
  

闽ICP备14008679号