В чем преимущество использования Retrofit в сочетании с Rxjava?
Почему RxJava часто используется с Retrofit?
Ответ 1
Вопрос
Дооснащение Уже в фоновом режиме. Тогда зачем нужна другая фоновая задача RxJava?
Я думаю, что наиболее важно, избегайте вложенных обратных вызовов (callback hell
).
, например) Callback hell (Дооснащение)
public interface MyService
{
@GET("users")
Call<List<UserModel>> getUser();
@GET("userinfo")
Call<UserInfoModel> getUserInfoById(@Query("id") Integer id);
}
service.getUser().enqueue(new Callback<UserModel>() {
@Override
public void onResponse(Call<UserModel> call, Response<UserModel> response) {
//process UserModel
UserModel data = response.body();
//if you want user infomation from server
service.getUserInfo(data.getId()).enqueue(new Callback<UserInfoModel>(){
//... is callback hell!!
});
}
@Override
public void onFailure(Call<UserModel> call, Throwable t) {
//error handling
}
});
, например.) Избегайте обратного вызова (Retrofit + RxJava)
public interface MyService
{
@GET("users")
Observable<List<UserModel>> getUser();
@GET("userinfo")
Observable<UserInfoModel> getUserInfoById(@Query("id") Integer id);
}
service.getUser()
.flatMapIterable(list -> list)
.flatMap(user -> service.getUserInfoById(user.getId()))
.doOnNext(userinfo -> saveUserInfo(userinfo)).subscribe();
если вы используете RxJava
, вы можете использовать Observable
, чтобы избежать этой ситуации.
Дополнительные
Вышеприведенный фрагмент кода является лишь примером.
Фактически, RxJava
содержит гораздо больше observe pattern
связанных функций.
Дополнительно - преимущество программирования, управляемого событиями, в Android (RxJava)
Большинство Android application
создаются на основе пользователя или данных interaction
. (например, обновление GUI при взаимодействии). Таким образом, мы рассматриваем их как set of events
, а проектирование и создание приложения на основе этого очень интуитивно понятное и подходящее для внутренних и внешних событий.
Ответ 2
Чтобы понять эти преимущества, вы должны сначала понять, насколько полезно для вашей кодовой базы принимать реактивные расширения.
-
Составляемость и преобразование
- Потоки предлагают очень удобный интерфейс. Он позволяет выполнять операции преобразования (по структуре и времени события) и в основном взаимодействовать (например, создавать зависимости или использовать результат/ошибку из другого потока) между различными потоками. Хотя вы можете сделать это с помощью обратных вызовов, если вы попытаетесь реализовать более сложный прецедент, который может быть даже простым, как 3 запроса, код быстро потеряет свою читаемость. С другой стороны, Rx позволяет реализовать сложные очень сложные сценарии и по-прежнему выглядят гладкими.
-
Threading и асинхронные операции
- Rx дает вам очень подробный контроль над тем, какие потоки будут использоваться для выполнения работы в разных точках потока. Чтобы указать здесь контраст, базовый подход вызова, используемый в Retrofit, предназначен только для планирования рабочих потоков и перенаправления результата обратно в вызывающий поток. Когда объявляется потоком, модификация не обрабатывает потоки и оставляет его только вам, что дает вам контроль.
-
Rx-библиотеки
- Как вы уже видели, существует множество библиотек, которые используют Reactive extensions и реализуют различные функции как поток. Вы можете легко воспользоваться ими при работе с вашими запросами.
Есть и другие преимущества, но вы можете сказать, что очень полезно идти реактивно. Запросы - очень хорошая отправная точка для изучения работы с потоками и постепенного внедрения в вашу кодовую базу все больше логики потока.
Это не подстановка. RxJava и Retrofit - идеальное совпадение, поэтому в первую очередь есть поддержка в Retrofit.