I have few report's from different users they have problem with crashing application.
To be honest I already don't have to much ideas what can happen.
Device is no active for some times for ex. 40 - 60 minutes and then this error.
Thanks for any advice or suggestions.
Error logs:
07-27 18:08:12.558 1883-5804/? E/AndroidRuntime: FATAL EXCEPTION: RxNewThreadScheduler-42\
io.reactivex.exceptions.UndeliverableException: java.io.IOException\
at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367)\
at io.reactivex.internal.operators.single.SingleCreate$Emitter.onError(SingleCreate.java:82)\
at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl.lambda$getChannel$5$RabbitMQConnectionImpl(RabbitMQConnectionImpl.java:141)\
at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl$$Lambda$3.subscribe(Unknown Source)\
at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)\
at io.reactivex.Single.subscribe(Single.java:3310)\
at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)\
at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:579)\
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)\
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)\
at java.util.concurrent.FutureTask.run(FutureTask.java:234)\
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153)\
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)\
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)\
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)\
at java.lang.Thread.run(Thread.java:841)\
Caused by: java.io.IOException\
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:124)\
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:120)\
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:142)\
at com.rabbitmq.client.impl.ChannelN.open(ChannelN.java:136)\
at com.rabbitmq.client.impl.ChannelManager.createChannel(ChannelManager.java:176)\
at com.rabbitmq.client.impl.AMQConnection.createChannel(AMQConnection.java:559)\
at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl.lambda$getChannel$5$RabbitMQConnectionImpl(RabbitMQConnectionImpl.java:132)\
at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl$$Lambda$3.subscribe(Unknown Source)\'a0\
at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)\'a0\
at io.reactivex.Single.subscribe(Single.java:3310)\'a0\
at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)\'a0\
at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:579)\'a0\
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)\'a0\
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)\'a0\
at java.util.concurrent.FutureTask.run(FutureTask.java:234)\'a0\
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153)\'a0\
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)\'a0\
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)\'a0\
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)\'a0\
at java.lang.Thread.run(Thread.java:841)\'a0\
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error\
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66)\
at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36)\
at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:443)\
at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:263)\
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:136)\
at com.rabbitmq.client.impl.ChannelN.open(ChannelN.java:136)\'a0\
at com.rabbitmq.client.impl.ChannelManager.createChannel(ChannelManager.java:176)\'a0\
at com.rabbitmq.client.impl.AMQConnection.createChannel(AMQConnection.java:559)\'a0\
at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl.lambda$getChannel$5$RabbitMQConnectionImpl(RabbitMQConnectionImpl.java:132)\'a0\
at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl$$Lambda$3.subscribe(Unknown Source)\'a0\
at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)\'a0\
at io.reactivex.Single.subscribe(Single.java:3310)\'a0\
at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)\'a0\
at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:579)\'a0\
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)\'a0\
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)\'a0\
at java.util.concurrent.FutureTask.run(FutureTask.java:234)\'a0\
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153)\'a0\
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)\'a0\
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)\'a0\
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)\'a0\
at java.lang.Thread.run(Thread.java:841)\'a0\
Caused by: com.rabbitmq.client.MissedHeartbeatException: Heartbeat missing with heartbeat = 60 seconds\
at com.rabbitmq.client.impl.AMQConnection.handleSocketTimeout(AMQConnection.java:784)\
at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:684)\
at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:48)\
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:603)\
at java.lang.Thread.run(Thread.java:841)\'a0\
Solution:
Implement global rx error handler ( https://github.com/ReactiveX/RxJava/blob/2.x/docs/What's-different-in-2.0.md#error-handling )
// If Java 8 lambdas are supported
RxJavaPlugins.setErrorHandler(e -> { });
// If no Retrolambda or Jack
RxJavaPlugins.setErrorHandler(Functions.<Throwable>emptyConsumer());
Of course this will not fix the problem. This will only prevent application crash if we forget to implement onError() method somewhere.
However everything is better than application crash : )