public
void onClick(View
view) { |
|
switch (view.getId()) { |
|
case
R.id.bt_one: |
|
//mainProgressBar.setVisibility(View.VISIBLE); |
|
//setBitmap1(); |
|
//setBitmap2(); |
|
setBitmap3(); |
|
break; |
|
case
R.id.bt_two: |
|
Intent intent
= new
Intent(MainActivity.this,
OtherActivity.class); |
|
startActivity(intent); |
|
break; |
|
} |
|
} |
|
|
|
/** |
|
* 异步设置图片
|
|
*/ |
|
private
void setBitmap1() { |
|
//创建被观察者 |
|
Observable.create(new
Observable.OnSubscribe<Bitmap>() { |
|
/** |
|
* 复写call方法 |
|
* |
|
* @param subscriber 观察者对象 |
|
*/ |
|
@Override |
|
public
void call(Subscriber<? super
Bitmap>
subscriber) { |
|
//通过URL得到图片的Bitmap对象 |
|
Bitmap bitmap
= GetBitmapForURL.getBitmap(url); |
|
//回调观察者方法 |
|
subscriber.onNext(bitmap); |
|
subscriber.onCompleted(); |
|
Log.i(" call --->
",
"运行在
" +
Thread.currentThread().getName()
+
" 线程"); |
|
} |
|
}) |
|
.subscribeOn(Schedulers.io())
// 指定subscribe()发生在IO线程 |
|
.observeOn(AndroidSchedulers.mainThread())
// 指定Subscriber的回调发生在UI线程 |
|
.subscribe(new
Observer<Bitmap>() {
//订阅观察者(其实是观察者订阅被观察者) |
|
|
|
@Override |
|
public
void onNext(Bitmap
bitmap) { |
|
mainImageView.setImageBitmap(bitmap); |
|
Log.i(" onNext --->
",
"运行在
" +
Thread.currentThread().getName()
+
" 线程"); |
|
} |
|
|
|
@Override |
|
public
void onCompleted() { |
|
mainProgressBar.setVisibility(View.GONE); |
|
Log.i(" onCompleted --->
",
"完成"); |
|
} |
|
|
|
@Override |
|
public
void onError(Throwable
e) { |
|
Log.e(" onError --->",
e.toString()); |
|
} |
|
}); |
|
} |
|
|
|
/** |
|
* 事件参数类型的变换
|
|
* 将String类型的URL转换成Bitmap
|
|
*/ |
|
private
void setBitmap2() { |
|
//先传递String类型的Url |
|
Observable.just(url) |
|
.map(new
Func1<String,
Bitmap>() { |
|
@Override |
|
public
Bitmap call(String
s) { |
|
//通过Map转换成Bitmap类型发送出去 |
|
return
GetBitmapForURL.getBitmap(s); |
|
} |
|
}) |
|
.subscribeOn(Schedulers.io())
// 指定subscribe()发生在IO线程 |
|
.observeOn(AndroidSchedulers.mainThread())
// 指定Subscriber的回调发生在UI线程 |
|
//可以看到,这里接受的类型是Bitmap,而不是String |
|
.subscribe(new
Action1<Bitmap>() { |
|
@Override |
|
public
void call(Bitmap
bitmap) { |
|
mainImageView.setImageBitmap(bitmap); |
|
mainProgressBar.setVisibility(View.GONE); |
|
} |
|
}); |
|
} |
|
|
|
|
|
/** |
|
* 事件参数类型的变换
|
|
* 将String类型的URL转换成Bitmap
|
|
* doOnSubscribe的使用
|
|
*/ |
|
private
void setBitmap3() { |
|
Observable.just(url)
//IO线程 |
|
.map(new
Func1<String,
Bitmap>() { |
|
@Override |
|
public
Bitmap call(String
s) { |
|
Log.i(" map --->
",
"执行"); |
|
Log.i(" map --->
",
Thread.currentThread().getName()); |
|
return
GetBitmapForURL.getBitmap(s); |
|
} |
|
}) |
|
.subscribeOn(Schedulers.io())
// 指定subscribe()发生在IO线程 |
|
.doOnSubscribe(new
Action0() { //需要在主线程中执行 测试来看 默认运行在main线程 ? |
|
@Override |
|
public
void call() { |
|
//mainProgressBar.setVisibility(View.VISIBLE); |
|
Log.i(" doOnSubscribe --->
",
"执行"); |
|
Log.i(" doOnSubscribe --->
",
Thread.currentThread().getName()); |
|
} |
|
}) |
|
.observeOn(Schedulers.io())
// 指定Subscriber的回调发生在io线程 |
|
.subscribe(new
Action1<Bitmap>() { |
|
@Override |
|
public
void call(Bitmap
bitmap) { |
|
//mainImageView.setImageBitmap(bitmap); |
|
//mainProgressBar.setVisibility(View.GONE); |
|
Log.i(" subscribe --->
",
"执行"); |
|
Log.i(" subscribe --->
",
Thread.currentThread().getName()); |
|
} |
|
}); |
|
} |