RxJava IO поток просыпается поток пользовательского интерфейса очень поздно после получения ответа HTTP - PullRequest
0 голосов
/ 20 мая 2019

Я работаю на карте.Этот вид карты обновляется с указанием местоположения соответствующих событий при нажатии кнопки.Эта информация о событии получена API-интерфейсом AWS appsyncclient.Однако основной поток пользовательского интерфейса просыпается в среднем примерно через 3 секунды после получения ответа http, как видно из журналов.Это нормально?Может ли основной поток пользовательского интерфейса проснуться быстрее, чем этот?

Вызов API ниже:

public void getEventsList(Consumer<MutableLiveData<ApiResponse>> listConsumer) {
    System.setProperty("rx2.io-priority", "" + (Thread.MAX_PRIORITY));
    disposables.add(eventSDK.SearchByMyRegion(String.valueOf(eventManager.getCurrentLatLng().latitude), eventManager.getLatitudeDelta(), String.valueOf(eventManager.getCurrentLatLng().longitude), eventManager.getLongitudeDelta())
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .doOnSubscribe(d -> {
                this.responseLiveData.setValue(ApiResponse.loading());
                listConsumer.accept(this.responseLiveData);
            })
            .doOnEvent((data, throwable) -> {
                this.responseLiveData.setValue(ApiResponse.terminate());
                listConsumer.accept(this.responseLiveData);
            })
            .subscribe(event -> {
                if (event != null) {
                    if (event.SearchByMyRegion() != null) {
                        this.responseLiveData.setValue(ApiResponse.success(event.SearchByMyRegion().stores()));
                        listConsumer.accept(this.responseLiveData);
                    }
                } else {
                     this.responseLiveData.setValue(ApiResponse.success(event.SearchByMyRegion().stores()));
                     listConsumer.accept(this.responseLiveData);
                }
            }, error -> {
                this.responseLiveData.setValue(ApiResponse.error(error));
                listConsumer.accept(this.responseLiveData);
            }));

Примечание: сетевая библиотека okhttp, AWS appsyncclient используется вместе с RxJava2.

Logcat logs:

**05-20 00:29:58.228 18828-19554/com.test.beta E/test: start of network call**
**05-20 00:29:58.233 18828-19136/com.test.beta D/OkHttp: --> POST https://example.com/graphql http/1.1 (1934-byte body)**
05-20 00:29:58.234 18828-19136/com.test.beta D/RetryInterceptor: Retry Interceptor called
05-20 00:29:58.234 18828-19136/com.test.beta D/AppSyncSigV4SignerInterceptor: Signer Interceptor called
05-20 00:29:59.559 18828-19136/com.test.beta I/RetryInterceptor: Returning network response: success
**05-20 00:29:59.559 18828-19136/com.test.beta D/OkHttp: <-- 200**  https://example.com/graphql (1325ms, 43055-byte body)
05-20 00:30:01.811 18828-19045/com.test.beta V/AppSyncOfflineMutationInterceptor: Thread:[388265]: processing Mutations
05-20 00:30:01.812 18828-19045/com.test.beta V/QueueUpdateHandler: Thread:[388265]: Got message to take action on the mutation queue.
    Thread:[388265]: Got message to process next mutation if one exists.
05-20 00:30:01.816 18828-19045/com.test.beta V/AppSyncOfflineMutationManager: Thread:[388265]:Persistent mutations queue is EMPTY!. Will check inMemory Queue next
05-20 00:30:01.817 18828-19045/com.test.beta V/AppSyncOfflineMutationManager: Thread:[388265]: In Memory mutations queue was EMPTY!. Nothing to process, exiting
**05-20 00:30:02.256 18828-19136/com.test.beta E/test: response received**
...