【问题标题】:Android app throws java.util.concurrent.RejectedExecutionException: pool=128/128, queue=10/10Android 应用抛出 java.util.concurrent.RejectedExecutionException: pool=128/128, queue=10/10
【发布时间】:2013-04-15 01:50:38
【问题描述】:

我的生产 android 应用程序抛出了这个异常。当我分析 crittercism 时,我注意到我的许多异步任务都没有完成。他们一直在坚持

ClientSession.java:361

responseMessage = (AMessageStrategy) objectInputStream.readObject();

ClientSession.java:321

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

对 SO 做了一些研究,发现this link。但没有发现任何将 RejectedExecution 与挂起问题联系起来的 SO 问题。因此这个问题。

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 个月后发生的随机错误。有什么想法吗?

【问题讨论】:

    标签: android android-asynctask iostream


    【解决方案1】:

    如果您在适配器上执行下载以在每个位置(在列表中)获取一个图像,那么您可能正在循环重复直到 Asynctask 上的 128 个线程。 对不起,我的英语不好。

    【讨论】:

    • 不,我这里没有使用适配器。
    • 然后尝试记录您的代码在堆栈上生成/重复超过 128 次异步任务调用的内容。
    【解决方案2】:

    在客户端,我创建了新的套接字而不关闭旧的套接字。这些插座堆在上面。大约 128 个套接字后,android max 退出并抛出此异常。

    我创建了一个超时并在不活动时关闭旧套接字。

    【讨论】:

      猜你喜欢
      • 2013-05-17
      • 2021-07-05
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 2022-12-15
      • 2019-01-29
      相关资源
      最近更新 更多