【问题标题】:Room Thread Management房间线程管理
【发布时间】:2018-08-17 09:34:31
【问题描述】:

以下 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 不会在后台线程上自动运行插入和删除操作。那么这句话应该是什么意思呢?

【问题讨论】:

  • 请提供有效链接,因为我无法打开您在上面添加的链接。

标签: android sqlite android-room


【解决方案1】:

这意味着这些房间操作是thread-safe(因此,如果您在不同的后台线程上运行插入/删除操作,则不必照顾它,source)

【讨论】:

    【解决方案2】:

    默认情况下,您不能在主线程上运行房间操作。 您可以使用.allowMainThreadQueries() 在主线程中运行它们。

    if (INSTANCE == null) {
            INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "database")
                    .allowMainThreadQueries()
                    .build();
        }
        return INSTANCE;
    

    或者您必须创建一个AsyncTask 来执行房间查询。

    如果您正在使用空间运行长时间运行的操作,您应该使用AsyncTask,因为在主 UI 线程上运行长时间运行的操作可能会导致您的 UI 阻塞。

    【讨论】:

      猜你喜欢
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 1970-01-01
      相关资源
      最近更新 更多