RxJava2.0异步线程实现Handler功能
Observable.create(new ObservableOnSubscribe<Drawable>() {
@Override
public void subscribe(ObservableEmitter<Drawable> emitter) throws Exception {
Bitmap normalBitmap = Picasso.with(context).load(bean.getIcon_url()).get();
Bitmap selectedBitmap = Picasso.with(context).load(bean.getIcon_hl_url()).get();
Drawable drawable = SelectorUtils.generatePressedSelector(new BitmapDrawable(selectedBitmap), new BitmapDrawable(normalBitmap));
Logger.d(TAG, "After observeOn(io), current thread is: " + Thread.currentThread().getName());
emitter.onNext(drawable);
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Drawable>(){
@Override
public void accept(Drawable drawable) throws Exception {
Logger.d(TAG, "After observeOn(mainThread), current thread is : " + Thread.currentThread().getName());
holder.menuImg.setImageDrawable(drawable);
}
});
AsyncTask实现Handler功能
new AsyncTask<Void,Void,Drawable>(){
@Override
protected Drawable doInBackground(Void... voids) {
try {
Bitmap normalBitmap = Picasso.with(context).load(bean.getIcon_url()).get();
Bitmap selectedBitmap = Picasso.with(context).load(bean.getIcon_hl_url()).get();
Drawable drawable = SelectorUtils.generatePressedSelector(new BitmapDrawable(selectedBitmap), new BitmapDrawable(normalBitmap));
return drawable;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Drawable drawable) {
super.onPostExecute(drawable);
holder.menuImg.setImageDrawable(drawable);
}
}.execute();
该文展示了如何使用RxJava2.0的Observable和AsyncTask来实现类似Handler的异步处理功能,具体是通过Picasso库加载图片到Drawable,然后在主线程更新UI。在RxJava示例中,创建了一个Observable,使用Schedulers.io()和AndroidSchedulers.mainThread()切换线程,最后将Drawable传递给订阅者更新UI。在AsyncTask示例中,图片加载和处理在后台线程执行,完成后在onPostExecute()回调中更新UI。
596

被折叠的 条评论
为什么被折叠?



