1.在初始化的时候 需要将
URL集合 中每个string转化为Observable 来实现 并行下载 且不需要前后顺序 只需要加载完成
因此使用 flatMap


2.选用的Scheduler 选用了常用的Schedulers.io() 在并行操作的情况下 为其自动分配线程执行任务
以下这些都是操作线程的方法,我们都知道RxJava在异步方面很优秀,那我们应该怎么去体现他尼,先来看下这几个函数的具体含义吧
Schedulers.immediate()
作用于当前线程运行,相当于你在哪个线程执行代码就在哪个线程运行
Schedulers.newthread();
运行在新线程中,相当于new Thread(),每次执行都会在新线程中
Schedulers.io();
一看便知,I/O操作,比如文件操作,网络操作等,他和newThread有点类似,不过I/O里面有一个死循环的线程池来达到最大限度的处理逻辑,虽然效率高,但是如果只是一般的计算操作,不建议放在这里,避免重复创建无用线程
Schedulers.computation()
一些需要CPU计算的操作,比如图形,视频等
AndroidSchedulers.mainThread();
指定运行在Android主线程中
3.具体demo
public void loadFromUrlList(List<String> list, Context context) {
if (CollectionUtils.isEmpty(list)) {
return;
}
Observable.from(list).flatMap(new Func1<String, Observable<String>>() {
@Override
public Observable<String> call(String s) {
Log.d(TAG, "Observable call: String: " + s + " name: " + Thread.currentThread().getName());
return Observable.just(s)
.subscribeOn(Schedulers.io())
.map(new Func1<String, String>() {
@Override
public String call(String s) {
Log.d(TAG, " doOnNext call: String: " + s + " name: " + Thread.currentThread().getName());
LottieCompositionFactory.fromUrl(context, s);
return s;
}
});
}
}).observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io()).subscribe(new Action1<String>() {
@Override
public void call(String s) {
Log.d(TAG, " subscribe call: String: " + s + " name: " + Thread.currentThread().getName());
}
});
}









