在单独的线程中执行
Execute in a separate thread
我有一个小应用程序,负责拦截请求和响应。将它们形成一个包并可以将它们保存到本地存储。我正在使用 Room 库在本地保存数据。
我的代码(如下所示)正在运行,但在构建时它以 allowMainThreadQueries() 的形式存在一个小制动器。我知道这是不可能完成的,所有的 IO 操作都必须在单独的线程中执行。
你能告诉我如何在单独的线程中执行此操作吗?
PacketsLocalDataSource.kt
class PacketsLocalDataSource(private val context: Context) {
lateinit var db: PacketsDatabase
lateinit var dao: PacketDao
fun saveLocal(packet: Packet) {
db = PacketsDatabase.getInstance(context)!!
dao = db.packetDao()
dao.add(packet)
}
}
您可以使用 Coroutines 进行后台工作。
class PacketsLocalDataSource(private val context: Context) {
private val dao: PacketsDao by lazy{PacketsDatabase.getInstance(context).packetDao() }
fun saveLocal(packet: Packet) {
CoroutineScope(Dispatchers.IO).launch {
dao.add(packet)
}
}
我有一个小应用程序,负责拦截请求和响应。将它们形成一个包并可以将它们保存到本地存储。我正在使用 Room 库在本地保存数据。
我的代码(如下所示)正在运行,但在构建时它以 allowMainThreadQueries() 的形式存在一个小制动器。我知道这是不可能完成的,所有的 IO 操作都必须在单独的线程中执行。
你能告诉我如何在单独的线程中执行此操作吗?
PacketsLocalDataSource.kt
class PacketsLocalDataSource(private val context: Context) {
lateinit var db: PacketsDatabase
lateinit var dao: PacketDao
fun saveLocal(packet: Packet) {
db = PacketsDatabase.getInstance(context)!!
dao = db.packetDao()
dao.add(packet)
}
}
您可以使用 Coroutines 进行后台工作。
class PacketsLocalDataSource(private val context: Context) {
private val dao: PacketsDao by lazy{PacketsDatabase.getInstance(context).packetDao() }
fun saveLocal(packet: Packet) {
CoroutineScope(Dispatchers.IO).launch {
dao.add(packet)
}
}