I have tried to create the async task using the RxJAVA2. The code is working fine. WHat enhancement can I do in this code? private void createObservable(){ progressDialog =new ProgressDialog(ProductActivityRx.this); progressDialog.setTitle("Data fetching..."); progressDialog.setCanceledOnTouchOutside(false); progressDialog.show(); Observable<List<Product>> booksObservable =Observable.fromCallable(new Callable<List<Product>>() { @Override public List<Product> call() throws Exception { return getProductList(); } }).doOnNext(new Consumer<List<Product>>() { @Override public void accept(List<Product> strings) throws Exception { } }); productSubscription = booksObservable. subscribeOn(Schedulers.io()). observeOn(AndroidSchedulers.mainThread()). subscribe(new Consumer<List<Product>>() { @Override public void accept(List<Product> productList) throws Exception { displayData(productList); } }); } I am updating the UI in displayData().