Configuring network calls in SyncAdapter onPerformSync

I am sending some reconfigured calls through SyncAdapter onPerformSync, and I am trying to configure HTTP calls by sending them through a try / catch sleep statement. However, this blocks the user interface and will not respond until after all calls have been completed.

What is the best way to regulate network calls (with a sleep timer) in the background in onPerformSync without blocking the interface?

  @Override
  public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) {

        String baseUrl = BuildConfig.API_BASE_URL;

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        service = retrofit.create(HTTPService.class);

        Call<RetroFitModel> RetroFitModelCall = service.getRetroFit(apiKey, sortOrder);
        RetroFitModelCall.enqueue(new Callback<RetroFitModel>() {
            @Override
            public void onResponse(Response<RetroFitModel> response) {
                if (!response.isSuccess()) {
                } else {
                    List<RetroFitResult> retrofitResultList = response.body().getResults();
                    Utility.storeList(getContext(), retrofitResultList);

                    for (final RetroFitResult result : retrofitResultList) {
                        RetroFitReview(result.getId(), service);

                        try {
                        // Sleep for SLEEP_TIME before running RetroFitReports & RetroFitTime
                            Thread.sleep(SLEEP_TIME);
                        } catch (InterruptedException e) {
                        }
                        RetroFitReports(result.getId(), service);
                        RetroFitTime(result.getId(), service);
                    }
                }
            }

            @Override
            public void onFailure(Throwable t) {
                Log.e(LOG_TAG, "Error: " + t.getMessage());
            }
        });
    }
}
+4
source share
1 answer

"onPerformSync" "SyncAdapterThread", . ( ).

"call.enqueue" Retrofit, . , :

?

, , Looper Handler, .

, , , /runnables . -, (Retrofit). , , Retrofit?

, Retrofit , , , . , , .

Retrofit (Platform.java):

static class Android extends Platform {
    @Override CallAdapter.Factory defaultCallAdapterFactory(Executor callbackExecutor) {
      if (callbackExecutor == null) {
        callbackExecutor = new MainThreadExecutor();
      }
      return new ExecutorCallAdapterFactory(callbackExecutor);
    }

    static class MainThreadExecutor implements Executor {
      private final Handler handler = new Handler(Looper.getMainLooper());

      @Override public void execute(Runnable r) {
        handler.post(r);
      }
    }
  }

"Looper.getMainLooper()", , Retrofit /runnables ( ). , /runnable .

, , onResponse/onFailure . , (Thread.sleep(SLEEP_TIME);). : onResponse , .

, ? ( Retrofit)

(SyncAdapterThread), . "", . , .

+5

Source: https://habr.com/ru/post/1628922/


All Articles