我可以使用 RxJava 缩短房间插入时间吗?

Can I shorten the room insertion time using RxJava?

我正在开发 android 应用程序。我很难编写将待办事项列表添加到日历的代码。先给大家看一下代码。

private fun addTodoList(entity: MyTodo) {
    val start = Calendar.getInstance()
    val end = start.clone() as Calendar
    end.time = SimpleDateFormat("MM dd, yyyy", Locale.getDefault()).parse(Date.END_OF_DAY)!!

    CoroutineScope(Dispatchers.Default).launch {
        val id = MyDatabase.getInstance(mContext).getTodoDao().insert(entity)
        val dao = MyDatabase.getInstance(mContext).getCalendarDao()

        do {
            val date = ymd.format(start.timeInMillis)
            val item = CalendarEntity(date, id.toInt())
            dao.insert(item)
            start.add(Calendar.DAY_OF_MONTH, 1)
        } while (start.timeInMillis <= end.timeInMillis)
    }
}

这是插入用户通过TodoDao创建的Todo的代码,将值插入CalendarDao从今天到Date.END_OF_DAY(我随机指定此值为“2025 年 12 月 31 日”)。但是通过CalendarDao的插入速度很慢。 UI没有什么不方便,但是如果用户在插入的时候完全从task中终止了app,那么直到最后插入数据都不会终止。一直说用RxJava可以解决这个问题,请问怎么解决呢?即使不是RxJava,如果有办法解决这个问题,请告诉我。

Dispatchers.Default更改为Dispatchers.IO

这是一个数据库操作,应该在 IO 线程上处理,Default 是一个真正的重型 CPU 线程。

使用 RxJava 是标准化数据库交互的好方法,它允许您远离 UI 线程并设置一个观察者模式,让您可以对数据做出反应得到它而不是等待它。

如果他们在执行此操作时关闭应用程序,您将无能为力,因为这是在 1 个事务下处理的。因此,对数据库的实际更改仅在最后处理,这意味着如果操作未完成,则不会插入任何内容。但是你也不想一次做这 1 笔交易,因为那太慢了。这是一个可靠性与速度的问题。