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