为什么建议不要对 Android 房间使用 allowMainThreadQueries()?
Why is recommended not to use allowMainThreadQueries() for Android room?
我正在创建一个小应用程序,它只在数据库中保存一些计数器。如果不存在,请插入一个。如果是,请增加更新。
该应用没有任何 UI。这是一个保存和读取数据(少量表格,少量记录)的插件。
我可以在这种情况下使用 allowMainThreadQueries() 吗?每次我读一些关于这个框架的教程总是说我不应该在生产中使用它。
来自开发者文档
https://developer.android.com/training/data-storage/room/accessing-data
注意:Room 不支持在主线程上访问数据库,除非您在构建器上调用了 allowMainThreadQueries(),因为它可能会长时间锁定 UI。异步查询 - return LiveData 或 Flowable 实例的查询 - 不受此规则约束,因为它们在需要时异步 运行 在后台线程上查询。
不建议在 UI 线程上 运行 数据库查询的主要原因是数据库通常携带大量数据,查询会花费很多时间,因此会阻塞您的 UI.
在你的情况下,因为你只有一个计数器,你可以在主线程上使用 allowMainThreadQueries
来完成。所有这些 "Not recommended" 都不会影响你的表现,因为它不涉及很多数据。但是,在您的数据库中使用单个计数器将与数据库(在您的情况下为 Room)的观点相矛盾。这样的计数器通常存储在SharedPreference
我正在创建一个小应用程序,它只在数据库中保存一些计数器。如果不存在,请插入一个。如果是,请增加更新。
该应用没有任何 UI。这是一个保存和读取数据(少量表格,少量记录)的插件。
我可以在这种情况下使用 allowMainThreadQueries() 吗?每次我读一些关于这个框架的教程总是说我不应该在生产中使用它。
来自开发者文档 https://developer.android.com/training/data-storage/room/accessing-data
注意:Room 不支持在主线程上访问数据库,除非您在构建器上调用了 allowMainThreadQueries(),因为它可能会长时间锁定 UI。异步查询 - return LiveData 或 Flowable 实例的查询 - 不受此规则约束,因为它们在需要时异步 运行 在后台线程上查询。
不建议在 UI 线程上 运行 数据库查询的主要原因是数据库通常携带大量数据,查询会花费很多时间,因此会阻塞您的 UI.
在你的情况下,因为你只有一个计数器,你可以在主线程上使用 allowMainThreadQueries
来完成。所有这些 "Not recommended" 都不会影响你的表现,因为它不涉及很多数据。但是,在您的数据库中使用单个计数器将与数据库(在您的情况下为 Room)的观点相矛盾。这样的计数器通常存储在SharedPreference