在单独的线程中执行

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)
        }
    }