2014-01-11 30 views
3

我已經構建了一個應用程序,並使用了Okhttp並進行了改進。一切正常,除了一些不規則的有線行爲。在這個新聞應用程序中,我觸發了多個部分的Feed下載請求。有時間請求永遠不會返回任何響應(甚至不會拋出異常),它只是卡住了,在Logcat中我看到了連續的垃圾回收。okhttp + retrofit - 監視器狀態的線程很多

我試圖找到潛在的嫌疑人找不到任何東西。我唯一可以從「新語絲」在DDMS看到的是大量的線程都在「監視」狀態(請參閱下面的截圖)

enter image description here

編輯: 另一種常用的線程轉儲用於改造:

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的緩存文件夾設置。之後,我沒有遇到這個問題。 File cacheDir = App.getContext()。getCacheDir(); okHttpClient.setResponseCache(cache); –