RxAndroid线程调度器(五)

本文详细介绍了RxAndroid中的线程调度器,包括Schedulers.immediate()、Schedulers.newThread()、Schedulers.io()、Schedulers.computation()和AndroidSchedulers.mainThread()的使用。特别强调了subscribeOn和observeOn在切换线程中的作用,以及如何在Android环境中处理UI线程。同时,示例代码展示了如何在IO线程中加载图片并在主线程中更新UI。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
}
});










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值