Android-приложение выдает java.util.concurrent.RejectedExecutionException: pool=128/128, queue=10/10

Мое производственное приложение для Android выдает это исключение. Когда я анализировал криттерцизм, я заметил, что многие из моих асинхронных задач не завершались. Они висели на

ClientSession.java:361

responseMessage = (AMessageStrategy) objectInputStream.readObject();

а также

ClientSession.java:321

objectInputStream = new ObjectInputStream(new BufferedInputStream(inputStream));.

Провел некоторое исследование SO и нашел это ссылка. Но не нашел ни одного вопроса SO, который связывает RejectedExecution с проблемой зависания. Отсюда этот вопрос.

org.apache.harmony.luni.platform.OSNetworkSystem.read(Native Method)
dalvik.system.BlockGuard$WrappedNetworkSystem.read(BlockGuard.java:273)
org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:461)
org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:85)
org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:65)
java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:140)
java.io.BufferedInputStream.read(BufferedInputStream.java:324)
java.io.DataInputStream.readToBuff(DataInputStream.java:159)
java.io.DataInputStream.readShort(DataInputStream.java:375)
java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2365)
java.io.ObjectInputStream.<init>(ObjectInputStream.java:433)
com.mcruiseon.common.communication.ClientSession$SendQueue.<init>(ClientSession.java:321)

org.apache.harmony.luni.platform.OSNetworkSystem.read(Native Method)    
dalvik.system.BlockGuard$WrappedNetworkSystem.read(BlockGuard.java:273)
org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:461)
org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:85)
org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:65)
java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:140)
java.io.BufferedInputStream.read(BufferedInputStream.java:225)
java.io.FilterInputStream.read(FilterInputStream.java:115)
java.io.ObjectInputStream.checkReadPrimitiveTypes(ObjectInputStream.java:466)
java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:899)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:2262)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:2217)
com.mcruiseon.common.communication.ClientSession$SendQueue.run(ClientSession.java:361)

У меня есть

  • очистить сразу после создания выходного потока
  • создание выходного потока перед входным потоком
  • промывка сразу после записи

Тем не менее я понимаю, что это случайная ошибка, которая произошла через 2 месяца после запуска продукта в производство. Есть идеи, люди?


person Siddharth    schedule 22.04.2013    source источник


Ответы (2)


Если вы выполняете загрузку на адаптер, чтобы получить одно изображение в каждой позиции (в списке), возможно, вы повторяете цикл до 128 потоков в асинтаске. извините за мой плохой английский.

person lucasddaniel    schedule 24.05.2013
comment
Нет, я не использую здесь адаптер. - person Siddharth; 25.05.2013
comment
затем попробуйте записать, что ваш код генерирует/повторяет более 128 вызовов асинхронной задачи в стеке. - person lucasddaniel; 26.05.2013

На клиенте я создавал новые сокеты, не закрывая старые. Эти розетки были нагромождены. Примерно через 128 сокетов Android Max выходит из строя и выдает это исключение.

Я создал тайм-аут и закрыл старые сокеты при бездействии.

person Siddharth    schedule 04.07.2013