簡體   English   中英

我們可以在生產環境中使用 runblocking 和協程來進行房間查詢嗎?

[英]can we use runblocking with coroutine for room queries in production?

在我們的產品中,我們使用 MVP 模式和 Room 示例,經過長時間的搜索,我得到了所有使用 MVVM 的示例,但現在我發現這種方式可以使用 runblocking 運行我的 Room 查詢,一切運行順利我想知道這是使用的好方法協程,聽說生產環境不推薦runblocking

@Query("""SELECT V.* FROM VISITS AS V LEFT JOIN ORDERS AS O ON O.visitId = V.visitId 
        WHERE V.visitComplete = 1 AND V.visitId = :visitId AND (V.shopClosed = 1 OR O.orderTotal > 0)""")
suspend fun getCompletedVisitByVisitId(visitId: Int): Visits

在我的表助手中,我得到了這樣的結果

fun getCompletedVisitByVisitId(visitId: Int): Visits? = runBlocking {

    var data: Visits? = null
    try {
        data = async {
            visitsDao.getCompletedVisitByVisitId(visitId)
        }.await()
    } catch (e: SQLException) {
        CustomMethods.errorLog(e, "getCompletedVisitByVisitId", ErrorLog.TYPE_ERROR, ErrorLog.APPLICATION_ERROR, context)
        e.printStackTrace()
    }
    data
}

override fun getCompletedVisitByVisitId(visitId: Int): Visits? {
        return visitsTableHelper!!.getCompletedVisitByVisitId(visitId)
    }

androidx.lifecycle package 為生命周期所有者(活動、片段、視圖模型等)提供擴展 function。 因此,將lifecycleScope.launch范圍.launch 用於 MVP 模式會很方便。 通過這種方式,當生命周期所有者不在其活動 state 中時,您的協程作業將自動取消。

所以,你的代碼可以是下面的生活:

override fun onCreate(savedInstanceState: Bundle?) {
    ...
    .....
    lifecycleScope.launch {
       try {
          val visits = getCompletedVisitByVisitId(someNumber)
          // do something with your data
       } catch (e: Exception) {
          //handle exception 
       }
    }
}
suspend fun getCompletedVisitByVisitId(visitId: Int): Visits? {

    var data: Visits? = null
    try {
        data = visitsDao.getCompletedVisitByVisitId(visitId)
    } catch (e: SQLException) {
        CustomMethods.errorLog(e, "getCompletedVisitByVisitId", ErrorLog.TYPE_ERROR, ErrorLog.APPLICATION_ERROR, context)
        e.printStackTrace()
    }
    data
}

同時導入依賴項:

def lifecycle_version = "2.3.1"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM