Tarea RxJava Async en Android

Estoy tratando de implementar una tarea asincrónica usando RxJava en Android. Intenté el siguiente código y no funcionó. Se ejecuta en el hilo de la interfaz de usuario. Estoy usando la siguiente versión de RxAndroid 0.24.0.

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

Sin embargo, lo siguiente funciona de forma asíncrona para mí.

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();

Estoy tratando de entender lo siguiente: 1. ¿Cuál es la diferencia entre ellos? 2. ¿Cuál es la mejor práctica al crear tareas asíncronas?

Gracias por adelantado.

Respuestas a la pregunta(2)

Su respuesta a la pregunta