启动活动后,我的浓缩咖啡测试失败,并在 45 秒后超时。
要启动活动,我使用 InstrumentationRegistry.getInstrumentation().startActivitySync(intent)。
尽管活动正确启动,但测试在 45 秒后运行超时失败。这只会偶尔发生。
请注意,我的应用程序在启动活动后立即通过 OkHTTP
获取一些内容。我还在使用像Firebase Event Logging这样的库。但是,我可以确认所有 OkHTTP 请求都在 2-3 秒内完成。
阻止浓缩咖啡完成测试的可能原因是什么?如何调试此问题?
以下是发生超时时的堆栈跟踪:
Thread[Jit thread pool worker thread 0,5,main]
Thread[arch_disk_io_3,5,main]
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2067)
java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
java.lang.Thread.run(Thread.java:919)
Thread[AsyncTask #1,5,main]
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:459)
java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:920)
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
java.lang.Thread.run(Thread.java:919)
Thread[Okio Watchdog,5,main]
java.lang.Object.wait(Native Method)
okio.AsyncTimeout.awaitTimeout(AsyncTimeout.java:361)
okio.AsyncTimeout$Watchdog.run(AsyncTimeout.java:312)
Thread[Timer-1,5,main]
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:442)
java.util.TimerThread.mainLoop(Timer.java:559)
java.util.TimerThread.run(Timer.java:512)
Thread[OkHttp ConnectionPool,5,main]
java.lang.Object.wait(Native Method)
com.android.okhttp.ConnectionPool$1.run(ConnectionPool.java:106)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
java.lang.Thread.run(Thread.java:919)
Thread[RenderThread,7,main]
Thread[HeapTaskDaemon,5,system]
Thread[queued-work-looper,5,main]
android.os.MessageQueue.nativePollOnce(Native Method)
android.os.MessageQueue.next(MessageQueue.java:336)
android.os.Looper.loop(Looper.java:174)
android.os.HandlerThread.run(HandlerThread.java:67)
Thread[hwuiTask1,6,main]
Thread[ReferenceQueueDaemon,5,system]
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:442)
java.lang.Object.wait(Object.java:568)
java.lang.Daemons$ReferenceQueueDaemon.runInternal(Daemons.java:215)
java.lang.Daemons$Daemon.run(Daemons.java:137)
java.lang.Thread.run(Thread.java:919)
Thread[pool-1-thread-1,5,main]
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2109)
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1132)
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:849)
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
java.lang.Thread.run(Thread.java:919)
Thread[OkHttp ConnectionPool,5,main]
java.lang.Object.wait(Native Method)
okhttp3.ConnectionPool$1.run(ConnectionPool.java:67)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
java.lang.Thread.run(Thread.java:919)
Thread[pool-5-thread-2,5,main]
sun.misc.Unsafe.park(Native Met
我现在能够通过在我的前提条件代码中的几个地方插入 Thread.sleep()
来解决这个问题(在启动所测试的活动之前)。
我希望我有时间深入研究浓缩咖啡,以帮助解决所有这些混乱。