Ответ 1
Где происходит синтаксический анализ (предположим, что я использую XML-конвертер для ответа процесса). Это основная нить или другая? Это зависит от реализации конвертера?
Всегда фоновый поток независимо от используемого вами конвертера.
Если мне нужно включить некоторые (тяжелые) правила проверки/бизнес-правила, мне нужно создать новый поток внутри вызываемого? Или это хорошо, если это сделать в методах обратного вызова?
Это довольно субъективно и есть много способов справиться с этим. Callback
будет выполняться по основному потоку по умолчанию.
Вы можете изменить поток, на который будут вызываться обратные вызовы, путем доставки пользовательского Executor
в RestAdapter.Builder
. Это повлияет на все службы, созданные этим RestAdapter
, однако это может быть не так, как вы хотите.
Нет ничего плохого в создании другого потока (или enqueueing on the executor) из Callback
, если работа, которую вы хотите выполнить, может быть выполнена параллельно с обновлением пользовательского интерфейса (например, легким кэшированием).
Если перед записью пользовательского интерфейса необходимо выполнить дорогостоящую работу, вам лучше отключить метод синхронного (без обратного вызова) и выполнить прорисовку самостоятельно. Таким образом, вы можете выполнять дорогостоящие операции до и после HTTP-вызова (файл ввода/вывода, кэширование, преобразование, проверка и т.д.).
В настоящее время мы используем RxJava (из которых Retrofit имеет экспериментальную поддержку) за то, что вы просите:
interface Foo {
@GET("/")
Observable<Foo> getFoo(String bar);
}
foo.getFoo()
.mapMany(new ExpensiveOperationFunction())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<TransformedFoo>() { .. });