利用RxJava加载图片

时间:2021-08-25 17:47:01

RxJava: https://github.com/ReactiveX/RxJava

主要使用RxJava完成图片的加载与显示,图片加载部分在IO线程中,图片显示部分在主线程即UI线程中进行。

注意:RxAndroid库最低要求minSDKVersion为9

添加依赖库

compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
package com.android.loadimagefromresource;

import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.Toast;

import rx.Observable;
import rx.Observer;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

public class MainActivity extends Activity {

private ImageView imageView;

int imageId;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

imageView = (ImageView) findViewById(R.id.image_imageView);
imageId = R.drawable.base;


Observable.create(new Observable.OnSubscribe<Drawable>() {
@Override
public void call(Subscriber<? super Drawable> subscriber) {

//让其休眠5秒中后显示图片
try {
Thread.sleep(5*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}

Drawable drawable = getDrawable(R.drawable.base);
subscriber.onNext(drawable);
subscriber.onCompleted();
}
})
.subscribeOn(Schedulers.io()) //事件发送,即图片加载在IO线程
.observeOn(AndroidSchedulers.mainThread()) //事件处理,即图片显示在UI线程
.subscribe(new Observer<Drawable>() {
@Override
public void onCompleted() {
Toast.makeText(getApplicationContext(),"success",Toast.LENGTH_SHORT);
}

@Override
public void onError(Throwable e) {

}

@Override
public void onNext(Drawable drawable) {
imageView.setImageDrawable(drawable);
}
});
}


}