房间线程管理

时间:2018-08-17 09:34:32

标签: android sqlite android-room

下面的Android开发者页面显示:

  

默认情况下,所有查询(@Query)必须在主线程以外的其他线程上执行。 (稍后您将进行操作。)对于诸如插入或删除之类的操作,如果您使用提供的便利注释,Room将为您管理线程。

来源:https://google-developer-training.gitbooks.io/android-developer-advanced-course-practicals/unit-6-working-with-architecture-components/lesson-14-room,-livedata,-viewmodel/14-1-a-room-livedata-viewmodel/14-1-a-room-livedata-viewmodel.html#task3intro

但这是不正确的,对吧? Room不会在后台线程上自动运行插入和删除操作。那么这句话是什么意思?

2 个答案:

答案 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,则不必理会)