有沒有辦法創建一個與登錄用戶系結的 CoroutineScope?
基本上,這個想法是創建一個協程范圍,我可以在用戶注銷時取消它,以便取消在該范圍上完成的所有作業。
我的想法是創建一個單例類,其中包含 userId 和 coroutineScope 之間的映射,然后在我需要的任何地方注入該類。然后我會觀察loggedInUser并取消不屬于loggedInUser的范圍,然后洗掉該范圍。
這是一個好方法還是有更優雅的方法來實作這一目標?
uj5u.com熱心網友回復:
我建議重新考慮你的設計。您不想存盤與某些特定 ID 相關聯的多個范圍,因為它會迫使您執行額外的作業,例如取消和處置未使用的范圍或參考另一個 ID。
通常,協程及其作用域不依賴于身份驗證和授權狀態。如果您沒有后端,您最好在后端或業務邏輯層控制這些狀態。
例如,您執行身份驗證,如果它失敗或根本沒有執行,您不向用戶提供任何需要登錄的邏輯/功能。否則,如果執行,您傳遞令牌/id/etc . 到以下 API 呼叫,這將為您提供與當前用戶相關的資料。
您不想實作依賴于當前用戶的協程之間的切換。您的應用程式中的并發應該是結構化的并且不是很復雜。資料或功能的可用性不應依賴于某些協程范圍。
uj5u.com熱心網友回復:
您好,如果您想在用戶登錄時存盤用戶資料,如串列、物件等,那么最好的方法是資料存盤。這是對以前使用的共享首選項的升級。
在資料存盤中,您可以觀察資料變化,因為它是實時資料,我們可以在活動或視圖模型范圍內收集它。
這也很有效,因為它具有生命周期意識,因此您不必擔心手動取消它,因為它會在螢屏恢復上恢復并在它進入后臺或回傳堆疊時暫停。
這是一個鏈接了解更多
呼叫api如下
lifecycleScope.launch {
dataStoreGetUserData().firstOrNull {
callApi()
true
}
}
這樣資料存盤中的資料只獲取一次,不會在每次資料更改時呼叫
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/532328.html
