android - okhttp+retrofit - 许多线程处于监控状态

标签 android retrofit okhttp

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

我试图找到潜在的嫌疑人,但找不到任何东西。从 ddms 中的“Threads”我唯一能看到的是很多线程处于“monitor”状态(请看截图)

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

任何想法,有人遇到过类似的问题吗?

最佳答案

看起来要么是响应缓存中的错误,要么是文件系统运行不正常。

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

关于android - okhttp+retrofit - 许多线程处于监控状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21068718/

相关文章:

android - android菜单内的菜单

android - 在 android 上以 root 身份运行 shell 命令?

java - 我的 checkGPS 方法从未运行过,gps 保持 0.0,0.0

java - JSON 转换对象与单独记录中的数组同名

android - 现在 SSLSocketFactory 在 Android 上已被弃用,处理客户端证书身份验证的最佳方法是什么?

java - 异步加载 JButton 图标

android - 改变 ListView 行项目的颜色

android - Retrofit - 网络调用导致应用程序挂起

java - 是否可以使用普通 Java 使用 okHttp 客户端执行 OAuth2 请求

android - 带有 GsonConverterFactory 的 Retrofit 2.0 为名称中包含非英文字母的字段返回 null