1

我正在使用 Fabric / Crashlytics 来跟踪我的应用程序崩溃,我遇到了这个崩溃:

致命异常:java.lang.OutOfMemoryError:在 java.lang.Thread.start(Thread.java:1050) 在 java.lang.VMThread.create(VMThread.java) 在 java.util.concurrent.ThreadPoolExecutor.addWorker 的线程创建失败(ThreadPoolExecutor.java:913) 在 java.util.concurrent.ThreadPoolExecutor.processWorkerExit(ThreadPoolExecutor.java:962) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098) 在 java.util.concurrent.ThreadPoolExecutor$ Worker.run(ThreadPoolExecutor.java:573) 在 java.lang.Thread.run(Thread.java:856)

我看到 1230 个线程,其中 1170 个来自 cling UPnP 库,如下所示:

cling-1761 at java.lang.Object.wait(Object.java) at java.lang.Object.wait(Object.java:364) at org.eclipse.jetty.client.HttpExchange.waitForDone(HttpExchange.java:170)在 org.fourthline.cling.transport.impl.jetty.StreamClientImpl$2.call(StreamClientImpl.java:115) 在 org.fourthline.cling.transport.impl.jetty.StreamClientImpl$2.call(StreamClientImpl.java:108) 在 java .util.concurrent.FutureTask.run(FutureTask.java:234) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573 ) 在 java.lang.Thread.run(Thread.java:856)

知道为什么这个库使用了太多线程吗?我认为我解决了这个问题,我没有更多与线程创建相关的崩溃。

谢谢

4

1 回答 1

0

当你初始化一个 UpnpServiceImpl 时,你可以创建你的配置来设置线程池的大小。示例代码是:

    protected UpnpServiceConfiguration createConfiguration() {
    return new AndroidUpnpServiceConfiguration() {
        protected ExecutorService createDefaultExecutorService() {
            return new ThreadPoolExecutor(10,
                    60,
                    60L,
                    TimeUnit.SECONDS,
                    new SynchronousQueue<Runnable>(),
                    new ClingThreadFactory(),
                    new ThreadPoolExecutor.DiscardPolicy());
        }

        @Override
        public int getRegistryMaintenanceIntervalMillis() {
            return 5000;
        }
    };
}
于 2018-04-18T08:59:18.837 回答