我构建了一个应用程序,其中使用了 Okhttp 和改造。除了一些不规则的有线行为外,一切正常。在这个新闻应用程序中,我触发了多个部分的提要下载请求。有时请求永远不会返回任何响应(甚至不抛出异常)它只是卡住,在 Logcat 中我看到连续的垃圾收集。
我试图找到潜在的嫌疑人,但找不到任何东西。从 ddms 中的“Threads”我唯一能看到的是很多线程处于“monitor”状态(请看截图)
编辑: 另一个用于改造的常用线程转储:
这是 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/