Tarefa RxJava Async no Android

Estou tentando implementar uma tarefa assíncrona usando RxJava no Android. Eu tentei o seguinte código e não funcionou. Ele é executado no thread da interface do usuário. Estou usando a seguinte versão do RxAndroid 0.24.0.

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

No entanto, o seguinte funciona de forma assíncrona para mim.

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

Estou tentando entender o seguinte: 1. Qual é a diferença entre eles? 2. Qual é a melhor prática ao criar tarefas assíncronas?

Desde já, obrigado.

questionAnswers(2)

yourAnswerToTheQuestion