下面的Android开发者页面显示:
默认情况下,所有查询(@Query)必须在主线程以外的其他线程上执行。 (稍后您将进行操作。)对于诸如插入或删除之类的操作,如果您使用提供的便利注释,Room将为您管理线程。
但这是不正确的,对吧? Room不会在后台线程上自动运行插入和删除操作。那么这句话是什么意思?
答案 0 :(得分:1)
默认情况下,您不能在主线程上运行房间操作。
您可以使用.allowMainThreadQueries()
在主线程中运行它们。
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "database")
.allowMainThreadQueries()
.build();
}
return INSTANCE;
或者您必须创建一个AsyncTask
来执行房间查询。
如果您正在使用会议室运行长时间运行的操作,则应使用AsyncTask
,因为在主UI线程上运行长时间运行的操作可能会导致UI阻塞。
答案 1 :(得分:0)
这意味着这些会议室操作是thread-safe(因此,例如,如果您在不同的后台线程上运行插入/删除操作,source,则不必理会)