接上次异步处理AsyncTask处理MediaMetadataRetriever加载网络视频图片第一帧会ANR的问题,以下为RXJAVA处理方式:
io.reactivex.Observable<Bitmap> observable = io.reactivex.Observable.create(new ObservableOnSubscribe<Bitmap>() { @Override public void subscribe(ObservableEmitter<Bitmap> e) throws Exception { MediaMetadataRetriever retriever = new MediaMetadataRetriever(); if (Build.VERSION.SDK_INT >= 14) { retriever.setDataSource(bean, new HashMap<String, String>()); } else { retriever.setDataSource(bean); } Bitmap bitmap = retriever.getFrameAtTime(); retriever.release(); e.onNext(bitmap); } }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()); observable.subscribe(new Observer<Bitmap>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Bitmap s) { RequestOptions options = new RequestOptions() .error(R.mipmap.no_pic) .placeholder(R.mipmap.no_pic); if(!activity.isFinishing()){ Glide.with(context).load(s).apply(options).into(holder.getItemPicBinding().pic); } } @Override public void onError(Throwable e) { LogUtils.e("异常"+e); } @Override public void onComplete() { } });