RxAndroid线程调度器(五)

来源:互联网 发布:移动数据被禁用怎么开 编辑:程序博客网 时间:2024/06/07 23:45
RxAndroid线程调度器: 用于线程的控制,做线程间的通讯
- Schedulers.immediate() 默认线程
- Schedulers.newThread() 每次都创建新的线程执行
- Schedulers.io() 包含线程池的机制, 线程个数无限, 可以复用空闲线程(常用)
- Schedulers.computation() CPU密集计算线程, 线程池线程数和CPU数一致.处理图形运算
- AndroidSchedulers.mainThread() Android更新界面的UI主线程(常用)

* subscribeOn 可执行多次, 切换操作符的线程
* observeOn 只需要执行一次, 指定订阅者执行的线程

//注意:这里用到了SD,记得加一下权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

Observable.just(Environment.getExternalStorageDirectory().getAbsolutePath() +"/shuaige.jpg")
//加载的是字符串,转换为Bitmp对象
.map(new Func1<String, Bitmap>() {
@Override
public Bitmap call(String s) {
//打印线程所在名称
String Threadname = Thread.currentThread().getName();
System.out.println("Func1call所在线程名称 : "+ Threadname);
Bitmap bitmap = BitmapFactory.decodeFile(s);
return bitmap;
}
})
//该方法决定了Func1call方法(被观察者执行逻辑)运行在哪个线程
// IO:线程名称RxIoScheduler-2(子线程,内部用到了一个线程池)
.subscribeOn(Schedulers.io())
.subscribeOn(Schedulers.io())//可以执行多次,对不同数据,在不同的线程中调用
//该方法决定了 Action1call方法(观察者执行逻辑)运行在哪个线程 mainThread:主线程
.observeOn(AndroidSchedulers.mainThread())//只能执行一次,多次调用,以第一次为基准
.subscribe(new Action1<Bitmap>() {
@Override
public void call(Bitmap bitmap) {
//打印线程所在名称
String Threadname = Thread.currentThread().getName();
System.out.println("Action1call所在线程名称 : "+ Threadname);
ImageView.setImageBitmap(bitmap);
}
});