错误消息
The connection pool for database '/data/data/com.app.test/databases/test-db' has been unable to grant a connection to thread 9734 (pool-3-thread-2) with flags 0x2 for 30.001001 seconds.
Connections: 1 active, 0 idle, 1 available.
Requests in progress:
executeForCursorWindow started 29982ms ago - running, sql="<<Complex SQL Query with an average of 3 LEFT JOINS>>"
在整个应用程序中,我们使用了ROOM和LiveData。正是在这个片段上,有多个观察者正在发生(大约 9 个观察者(。对于观察到的每个实时数据,都有:
-
Transformations.switchMap()
-
Transformations.map()
- 每个模型都有
@Embedded
注释,有些模型有多个@Relation
注释。
观察
- 错误消息不断淹没 LogCat,直到我强制停止 该应用程序。
- 所有其他查询都不起作用。
测试环境
- 华硕 Nexus 7 (安卓 5.1.1( - 100% 可重现
- 联想标签 7 (安卓 7.0( - 仅体验 1 倍
我做了一些研究,但没有一个人使用ROOM并遇到过这个问题。
根据我的观察,我将此问题离开设备将近一个小时,然后发现查询继续进行并且SQLite警告未记录,并且SQL查询已经执行。
我研究了复杂的SQL查询,发现多个LEFT JOIN
(其中6个(导致了由GROUP BY
处理的重复记录。
为了证明这一观察结果,我注释掉了复杂的SQL查询,并且该错误无法在华硕Nexus 7(Android 5.1.1(设备上再复制。
总之,对于可能遇到相同问题的任何人,请尝试检查查询的执行时间并尝试对其进行优化。