Я сталкиваюсь с ошибками OutOfMemory в моем приложении, как показано ниже:
OutOfMemoryError: Unable to Create New Native Thread
Я вижу много потоков, как показано ниже:
OkHttp ConnectionPool - priority:5 - threadId:0x00007ff5a0060800 - nativeId:0xc5df - nativeId (decimal):50655 - state:TIMED_WAITING
stackTrace:
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:460)
at okhttp3.ConnectionPool$1.run(ConnectionPool.java:67)
- locked <0x00000006c12436a0> (a okhttp3.ConnectionPool)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Кажется, я не закрываю ответ соединения какЯ должен, ниже код, который я имею:
Response<T> response = call.execute(); // Call<T> call
if( response.isSuccessful() )
{
return response.body();
}
else
{
...
}
Как я могу закрыть ответ?Это то, что я делаю, если знаю, что содержимое будет возвращено:
Response<ResponseBody> response = call.execute(); // Call<ResponseBody> call
if( response.isSuccessful() )
{
try (ResponseBody body = response.body())
{
if( body != null )
{
return new String( body.bytes() );
}
}
return null;
}
else
{
....
}
Я вижу, что я также не определяю пул соединений для OkHttpClient.Может ли это быть проблемой?Что произойдет, если оно не определено, будет ли оно создавать новые соединения и, следовательно, вызывать эту утечку?