okhttp + retrofit - 监视器状态下有很多线程

时间:2014-01-11 22:31:16

标签: android retrofit okhttp

我已经构建了一个应用程序,我使用了Okhttp并进行了改造。除了一些不规则的有线行为外,一切正常。在这个新闻应用程序中,我触发多个部分的Feed下载请求。不时的请求永远不会返回任何响应(甚至不会抛出异常)它只是卡住了,在Logcat中我看到了连续的垃圾收集。

我试图找到潜在的嫌疑人找不到任何东西。我在ddms中的“线程”中只能看到很多线程处于“监视”状态(请参见屏幕截图)

enter image description here

修改 另一个常用的螺纹转储改造:

enter image description here

以下是Retrofit配置:

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;
}

任何想法,任何人都会遇到类似问题吗?

1 个答案:

答案 0 :(得分:0)

看起来像响应缓存中的错误,或者文件系统运行不正常。

响应缓存在将文件写入文件系统时保持锁定,看起来其中一个写入没有很快完成。你能展示其他线程的线程转储吗?