RxJava2.0异步线程实现Handler功能,AsyncTask实现Handler功能

该文展示了如何使用RxJava2.0的Observable和AsyncTask来实现类似Handler的异步处理功能,具体是通过Picasso库加载图片到Drawable,然后在主线程更新UI。在RxJava示例中,创建了一个Observable,使用Schedulers.io()和AndroidSchedulers.mainThread()切换线程,最后将Drawable传递给订阅者更新UI。在AsyncTask示例中,图片加载和处理在后台线程执行,完成后在onPostExecute()回调中更新UI。

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();
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值