首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >okhttp+retrofit -许多处于监视器状态的线程

okhttp+retrofit -许多处于监视器状态的线程
EN

Stack Overflow用户
提问于 2014-01-11 22:31:15
回答 1查看 1.3K关注 0票数 3

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

我试着找出潜在嫌疑人找不到任何线索。我从ddms中的“线程”中唯一能看到的是很多线程处于“监视器”状态(请看屏幕截图)。

编辑:另一种常用的用于修改的线程转储:

这里是Retrofit配置:

代码语言:javascript
复制
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;
}

有谁遇到过类似的问题吗?

EN

回答 1

Stack Overflow用户

发布于 2014-01-12 18:53:27

看起来要么是响应缓存中的错误,要么是工作不太好的文件系统。

在将文件写入文件系统时,响应缓存持有一个锁,看起来其中一个写操作完成得不太快。您能显示其他线程的线程转储吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21068718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档