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