RxJava Async Aufgabe in Android

Ich versuche, eine asynchrone Aufgabe mit RxJava in Android zu implementieren. Ich habe den folgenden Code ausprobiert und es hat nicht funktioniert. Es wird auf dem UI-Thread ausgeführt. Ich verwende die folgende Version von RxAndroid 0.24.0.

try {
            Observable.just(someMethodWhichThrowsException())
                    .subscribeOn(Schedulers.newThread())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(s -> onMergeComplete());
        } catch (IOException e) {
            e.printStackTrace();
        }

Das Folgende funktioniert bei mir jedoch asynchron.

Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                try {
                    someMethodWhichThrowsException();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                subscriber.onCompleted();
            }
        });
        observable.subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe();

Ich versuche Folgendes zu verstehen: 1. Was ist der Unterschied zwischen ihnen? 2. Was ist die beste Vorgehensweise beim Erstellen von asynchronen Aufgaben?

Danke im Voraus