Ответ да, когда вы выполняете свой метод с помощью службы, метод randomOn создаст «Наблюдатель», который будет ждать возможности выполнить запрос, как только mainThread сможет это сделать.
Итак, сначала используйте .observeOn (AndroidSchedulers.mainThread()), чтобы наблюдать за основным потоком, а затем подписаться на действие или обратный вызов, который будет выполняться после получения ответа от удаленного API.
предположив использовать эту аннотацию в интерфейсе API
@GET("/home")
Observable<Response> getHome();
это будет пример:
service.getHome().observeOn(AndroidSchedulers.mainThread()).subscribe(
new Action1<Response>() {
@Override
public void call(Response response) {
System.out.println("Response home");
System.out.println(response.getStatus());
System.out.println(response.getBody().mimeType());
System.out.println(response.getReason());
System.out.println(response.getUrl());
StringWriter w = new StringWriter();
try{
IOUtils.copy(response.getBody().in(),w,"UTF-8");
System.out.println(w.toString());
}catch (IOException e){}
}
});
Для получения дополнительной информации вы можете проверить это RxJava (тот, который модернизации использует конечно) link, где указано, что он использует обработчик Android (который является классом для обработки потоков).
«Он предоставляет планировщик, который планирует Наблюдаемый на данной потоке обработчика Android, в частности, основной пользовательский интерфейс . "
Спасибо за объяснение. Я понимаю, как мы можем указать основной поток как поток, который используется, когда ответ возвращается к наблюдателю. Однако из фразы, которую я хотел уточнить, по умолчанию говорится, что он будет использовать поток для выполнения HTTP-запроса. Я все еще запутался, кто действительно выполняет HTTP-запрос? – user2934804
Ваше приветствие, чтобы разъяснить немного больше, возможно, более важно понять, как работают Android-обработчики. Это можно найти с помощью поиска в документации по Android. По существу, по умолчанию обработчик добавляет «задачу» в очередь, поэтому, когда основной поток пользовательского интерфейса имеет шанс, эта задача будет выполнена, как бы там ни было возможно создать другой поток, поскольку Runnables можно реализовать с помощью обработчика Android, а также использует объект Looper, который является частью платформы управления потоками Android. – Jorch914