3.RxJava详解
new
Thread() {
@Override
public void run() {
super
.run();
for
(File folder : folders) {
File[] files = folder.listFiles();
for
(File file : files) {
if
(file.getName().endsWith(
".png"
)) {
final Bitmap bitmap = getBitmapFromFile(file);
getActivity().runOnUiThread(
new
Runnable() {
@Override
public void run() {
imageCollectorView.addImage(bitmap);
}
});
}
}
}
}}.start();
2.RxJava
Observable.from(folders)
.flatMap(
new
Func1<File, Observable<File>>() {
@Override
public Observable<File> call(File file) {
return
Observable.from(file.listFiles());
}
})
.filter(
new
Func1<File, Boolean>() {
@Override
public Boolean call(File file) {
return
file.getName().endsWith(
".png"
);
}
})
.map(
new
Func1<File, Bitmap>() {
@Override
public Bitmap call(File file) {
return
getBitmapFromFile(file);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
new
Action1<Bitmap>() {
@Override
public void call(Bitmap bitmap) {
imageCollectorView.addImage(bitmap);
}
});






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!"
);
}};
Subscriber<String> subscriber =
new
Subscriber<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!"
);
}};
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();
}});
由此可见,传入了一个subscriber作为参数,Observable在被订阅的时候调用call(),事件就会依序执行。
Observable observable = Observable.just(
"Hello"
,
"Hi"
,
"Aloha"
);
String[] words = {
"Hello"
,
"Hi"
,
"Aloha"
};
Observable observable = Observable.from(words);observable.subscribe(observer);
// 或者:
observable.subscribe(subscriber);
public Subscription subscribe(Subscriber subscriber) {
subscriber.onStart(); //准备
onSubscribe.call(subscriber); //事件发送的逻辑开始
return
subscriber; //返回监听对象
}
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 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);
int drawableRes = ...;
ImageView imageView = ...;
Observable.create(
new
OnSubscribe<Drawable>() {
@Override
public void call(Subscriber<?
super
Drawable> subscriber) {
Drawable drawable = getTheme().getDrawable(drawableRes));
subscriber.onNext(drawable);
subscriber.onCompleted();
}
}).subscribe(
new
Observer<Drawable>() {
@Override
public void onNext(Drawable drawable) {
imageView.setImageDrawable(drawable);
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Toast.makeText(activity,
"Error!"
, Toast.LENGTH_SHORT).show();
}
});
- Schedulers.immediate():当前线程。
- Schedulers.newThread():新启线程。
- Schedulers.io(): I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler。(*)
- Schedulers.computation(): 计算所使用的 Scheduler。
- AndroidSchedulers.mainThread(),它指定的操作将在 Android 主线程运行。
- subscribeOn(): 指定 subscribe() 所发生的线程,即 Observable.OnSubscribe 被激活时所处的线程。或者叫做事件产生的线程。
- observeOn(): 指定 Subscriber 所运行在的线程。或者叫做事件消费的线程。
Observable.just(1, 2, 3, 4)
.subscribeOn(Schedulers.io())
// 指定 subscribe() 发生在 IO 线程
.observeOn(AndroidSchedulers.mainThread())
// 指定 Subscriber 的回调发生在主线程
.subscribe(
new
Action1<Integer>() {
@Override
public void call(Integer number) {
Log.d(tag,
"number:"
+ number);
}
});
3.RxJava详解的更多相关文章
- 78. Android之 RxJava 详解
转载:http://gank.io/post/560e15be2dca930e00da1083 前言 我从去年开始使用 RxJava ,到现在一年多了.今年加入了 Flipboard 后,看到 Fli ...
- 给 Android 开发者的 RxJava 详解
我从去年开始使用 RxJava ,到现在一年多了.今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使用的场景越来越多 .而最近这几个 ...
- android ------- 开发者的 RxJava 详解
在正文开始之前的最后,放上 GitHub 链接和引入依赖的 gradle 代码: Github: https://github.com/ReactiveX/RxJava https://github. ...
- RxJava 详解
给 Android 开发者的 RxJava 详解: http://gank.io/post/560e15be2dca930e00da1083#toc_1
- 转:给 Android 开发者的 RxJava 详解
转自: http://gank.io/post/560e15be2dca930e00da1083 评注:多图解析,但是我还是未看懂. 前言 我从去年开始使用 RxJava ,到现在一年多了.今年加入 ...
- Android之RxJava详解
文章大纲 一.什么是RxJava二.为什么要用RxJava三.RxJava使用详解四.项目源码下载五.参考文章 一.什么是RxJava Rx(Reactive Extensions)是一个库,用来 ...
- 2.RxJava详解网址http
RxJava 到底是什么 RxJava 好在哪 API 介绍和原理简析 1) Scheduler 的 API (二) 2) Scheduler 的原理(二) 3) 延伸:doOnSubscribe() ...
- RxJava 详解——简洁的异步操作(二)
上次说的两个例子,事件的发出和消费都是在同一个线程的.如果只用上面的方法,实现出来的只是一个同步的观察者模式.观察者模式本身的目的就是异步机制,因此异步对于 RxJava 是至关重要的.而要实现异步, ...
- RxJava 详解——简洁的异步操作(一)
随着越来越多的人开始提及 RxJava ,鉴于 RxJava 目前这种既火爆又神秘的现状,写下这篇文章来对 RxJava 做一个相对详细的.针对 Android 开发者的介绍. 这篇文章的目的有两个: ...
随机推荐
- phpstorm 配置
JetBrains PhpStorm 8注册码一枚 username :cf96PiPYt271u1TC License Key : 97807-12042010 00001GctOKh8f206hl ...
- c#中方法out参数的使用
一个很普通的例题,求出一个整型数组的最小值.最大值.总和.平均值,利用调用函数的方法来ut参数实现 using System; using System.Collections.Generic; us ...
- 判断鼠标从哪个方向进入--jQuery
转载自:http://sentsin.com/web/112.html $("#wrap").bind("mouseenter mouseleave",func ...
- allegro 的光绘层概念
TOP层: board geometry/outline manufacturing/photoplot_outline etch/top ...
- 【Maven实战】依赖的范围
在Maven中有三大模块,分别是依赖.仓库.生命周期和插件,我们接下来下来介绍下依赖,为了方便起见我们还是以案例来说: 1.首先建立一个maven项目,这里我建立一个user的项目 2.接下来我们在这 ...
- moveToThread的最简单用法(依葫芦画瓢即可)(使得线程也更偏向于信号槽的使用方法)
/*! * \file main.cpp * * Copyright (C) 2010, dbzhang800 * All rights reserved. * */ #include <QtC ...
- JNA入门实例
JNA(Java Native Access):建立在JNI之上的Java开源框架,SUN主导开发,用来调用C.C++代码,尤其是底层库文件(windows中叫dll文件,linux下是so[shar ...
- 【模拟】Codeforces 706A Beru-taxi
题目链接: http://codeforces.com/problemset/problem/706/A 题目大意: 家的坐标在sx,sy,有n辆车,每辆车坐标xi,yi,速度vi,问最快的一辆车什么 ...
- radio 和checkbox与文字对齐问题
今天在项目中遇到radio和文字对齐问题(ie不明显,火狐和google比较明显),在此记录. 1.浏览器默认文字大小为14px,因而当文字字体为14px时radio和checkbox与文字对齐良好, ...
- SAE 搭建 WordPress
WordPress,是国外一款使用PHP语言开发的开源博客平台,用户可以在支持PHP和MySQL 数据库的服务器上架设自己的博客站点,也可以把 WordPress 当作一个内容管理系统(CMS)来使用 ...