2014-01-11 8 views
3

У меня есть приложение, в котором я использовал Okhttp и модифицировал. Все работает отлично, за исключением некоторых нерегулярных проводных действий. В этом приложении новостей я запускаю запрос загрузки загрузки для нескольких разделов. Запросы времени от времени никогда не возвращают никакого ответа (даже исключая исключения), он просто застревает, а в Logcat я вижу непрерывные сборки мусора.okhttp + retrofit - много потоков в состоянии монитора

Я пытался найти потенциального подозреваемого, найти ничего не могу найти. Единственное, что я могу видеть из «Нити» в DDMS является то, что много потоков в «мониторе» состоянии (см скриншота)

enter image description here

Edit: Другой обычной свалки Нити для модернизации:

enter image description here

Вот дооснащения конфигурации:

public interface ApiService { 
    @GET("/feed/get-news-feed/{section}") 
    void getNewsArticles(
      @Path("section") String section, 
      Callback<GeneratedNewsEntryList> callback 
    ); 
} 

public static ApiService getInstance() { 
    if(service == null) { 
     OkHttpClient okHttpClient = new OkHttpClient(); 
     File cacheDir = App.getContext().getCacheDir(); 
     HttpResponseCache cache = null; 
     try { 
      cache = new HttpResponseCache(cacheDir, 1024); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     okHttpClient.setResponseCache(cache); 

     RestAdapter restAdapter = new RestAdapter.Builder() 
       .setServer(BASE_URL) 
       .setClient(new OkClient(okHttpClient)) 
       .setErrorHandler(new ErrorHandler() { 

        @Override 
        public Throwable handleError(RetrofitError arg0) { 
         if(arg0.getResponse().getStatus() == 404) 
          return new Exception("Url does not exists"); 

         return new Exception(arg0.getMessage()); 
        } 
       }) 
       .build(); 
     service = restAdapter.create(ApiService.class); 
    } 

    return service; 
} 

Любая идея, у кого возникают подобные проблемы?

+0

Эй У меня проблемы с этим, было интересно, можете ли вы просто помочь мне ... интересно, откуда вы получили услугу в своем примере? Можете ли вы показать больше кода, пожалуйста? спасибо – Lion789

+0

Возможно вы сможете помочь ответить на этот вопрос http://stackoverflow.com/questions/22445177/trying-to-make-use-of-httpcache-android – Lion789

ответ

0

Похоже на ошибку в кеше ответа или файловую систему, которая работает не очень хорошо.

Кэш ответа хранит блокировку при записи файлов в файловую систему, и похоже, что одна из записей не выполняется очень быстро. Можете ли вы показать дампы потоков для других потоков?

+0

Извините, не знаю, на что еще ссылаетесь. Я добавил еще один снимок экрана в свой пост, не уверен, что это поможет или нет? –

+0

Немного больше информации: у меня есть шесть разделов для новостей и при запуске приложения, он запускает шесть запросов GET последовательно (просто выполните шесть запросов один за другим, не дожидаясь ответа на последний запрос перед отправкой следующего запроса). Может быть, это связано? –

+0

Я удалил настройку папки кэша для okHttp. После этого я не испытывал этих проблем. Файл cacheDir = App.getContext(). GetCacheDir(); okHttpClient.setResponseCache (cache); –