В настоящее время я просматриваю следующее руководство: https://developer.android.com/topic/libraries/architecture/guide.html
Класс networkBoundResource:
// ResultType: Type for the Resource data
// RequestType: Type for the API response
public abstract class NetworkBoundResource<ResultType, RequestType> {
// Called to save the result of the API response into the database
@WorkerThread
protected abstract void saveCallResult(@NonNull RequestType item);
// Called with the data in the database to decide whether it should be
// fetched from the network.
@MainThread
protected abstract boolean shouldFetch(@Nullable ResultType data);
// Called to get the cached data from the database
@NonNull @MainThread
protected abstract LiveData<ResultType> loadFromDb();
// Called to create the API call.
@NonNull @MainThread
protected abstract LiveData<ApiResponse<RequestType>> createCall();
// Called when the fetch fails. The child class may want to reset components
// like rate limiter.
@MainThread
protected void onFetchFailed() {
}
// returns a LiveData that represents the resource
public final LiveData<Resource<ResultType>> getAsLiveData() {
return result;
}
}
Я немного запутался здесь в использовании потоков.
Почему @MainThread применяется здесь для networkIO?
Кроме того, для сохранения в db применяется @WorkerThread, тогда как @MainThread для получения результатов.
Неправильно ли использовать рабочий поток по умолчанию для взаимодействия NetworkIO и локального db?
Я также проверяю следующее демо (GithubBrowserSample): https://github.com/googlesamples/android-architecture-components
Это смущает меня с точки зрения резьбы.
Демонстрация использует среду исполнителей и определяет фиксированный пул с 3 потоками для networkIO, однако в демо только рабочая задача определена для одного вызова, т.е. FetchNextSearchPageTask
. Все остальные сетевые запросы, похоже, выполняются в основном потоке.
Может ли кто-нибудь разъяснить обоснование?