Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android okhttp+;改装-大量线程处于监视状态_Android_Retrofit_Okhttp - Fatal编程技术网

Android okhttp+;改装-大量线程处于监视状态

Android okhttp+;改装-大量线程处于监视状态,android,retrofit,okhttp,Android,Retrofit,Okhttp,我已经建立了一个应用程序,我使用Okhttp和改装。除了一些不规则的有线行为外,一切正常。在这个新闻应用程序中,我触发了多个部分的提要下载请求。时间到时间的请求永远不会返回任何响应(甚至不会抛出异常),它只是被卡住了,在Logcat中我看到了连续的垃圾收集 我试图找到潜在的嫌疑犯,但什么也找不到。从ddms中的“线程”中我能看到的唯一一件事是很多线程都处于“监视”状态(请参见屏幕截图) 编辑: 用于改装的另一个常见螺纹转储: 这是改装配置: public interface ApiServi

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

我试图找到潜在的嫌疑犯,但什么也找不到。从ddms中的“线程”中我能看到的唯一一件事是很多线程都处于“监视”状态(请参见屏幕截图)

编辑: 用于改装的另一个常见螺纹转储:

这是改装配置:

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;
}
公共接口服务{
@获取(“/feed/GET news feed/{section}”)
作废新闻文章(
@路径(“段”)字符串段,
回调
);
}
公共静态API服务getInstance(){
if(服务==null){
OkHttpClient OkHttpClient=新的OkHttpClient();
文件cacheDir=App.getContext().getCacheDir();
HttpResponseCache=null;
试一试{
cache=新的HttpResponseCache(cacheDir,1024);
}捕获(IOE异常){
e、 printStackTrace();
}
okHttpClient.setResponseCache(缓存);
RestAdapter RestAdapter=new RestAdapter.Builder()
.setServer(基本URL)
.setClient(新的OkClient(okHttpClient))
.setErrorHandler(新的ErrorHandler(){
@凌驾
公共可丢弃句柄错误(错误arg0){
如果(arg0.getResponse().getStatus()==404)
返回新异常(“Url不存在”);
返回新异常(arg0.getMessage());
}
})
.build();
service=restAdapter.create(ApiService.class);
}
回程服务;
}

你知道吗,有人遇到过类似的问题吗?

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


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

对不起,不知道你指的是什么其他线程转储:我在帖子中添加了另一个屏幕截图,不确定它是否有用?只是多一点信息:我有六个新闻部分,在应用程序启动时,它会依次触发六个GET请求(只需一个接一个地执行六个请求,而不是在发送下一个请求之前等待接收上一个请求的响应)。是否相关?我已删除okHttp的缓存文件夹设置。此后,我没有遇到此问题。文件cacheDir=App.getContext().getCacheDir();okHttpClient.setResponseCache(缓存);很高兴听到Mohammad。如果你再次看到一些东西,请在OkHttp问题跟踪程序上提交一个bug,我来看看。嘿,我在使用这个时遇到了问题,想知道你是否可以帮我解决…想知道你在他的示例中从何处获得服务?你能显示更多代码吗?谢谢你可以帮助回答这个问题