我可以使用 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 笔交易,因为那太慢了。这是一个可靠性与速度的问题。
我正在开发 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 笔交易,因为那太慢了。这是一个可靠性与速度的问题。