我有一個基于 Kotlin 的活動應用程式,它啟動前臺服務:
applicationContext.startForegroundService(serviceIntent)
接下來我系結到服務,以便我可以獲取一個 Ibinder 物件并通過訊息(雙向)與它通信,使用:
bindService(serviceIntent, myConnection, Context.BIND_IMPORTANT)
在服務的 onCreate 方法中我執行
startForeground(1, notification) // posts a persistent notification
這樣即使用戶正在運行另一個應用程式,該服務也將繼續運行。這一切運作良好。
現在我想將應用程式重構為一個包含多個片段的活動。我想在片段之間共享服務(無論如何,其中有幾個)。(我已經讓片段干凈地導航了。)
我想遵循 MVVM 設計模式并將啟動/停止服務控制放在存盤庫類中(正如Stackoverflow 上的 MVVM 架構中啟動服務的正確位置所建議的那樣。
但是,我似乎無法讓它作業。我嘗試了以下方法(除其他外!):
import android.content.Intent
import androidx.core.content.ContextCompat.startForegroundService
class myRepository {
fun initService() {
val serviceIntent = Intent(this, MyService::class.java)
startForegroundService(serviceIntent)
}
}
函式的第一行有“Intent”,用紅色下劃線表示“以下函式都不能使用提供的引數呼叫”。
startForegroundService 陳述句的右括號也有一個紅色下劃線,當滑鼠懸停在上面時會顯示“沒有為引數 'intent' 傳遞值”。所以我的 Intent 宣告似乎有問題。
有什么簡單的(希望如此)我只是想念嗎?它與我的存盤庫的背景關系有關嗎?
uj5u.com熱心網友回復:
當您呼叫“ this ”時,您指的是實際類;在這種情況下' MyRepository '。此類未系結到任何 Android 背景關系,因此不是您的意圖的有效引數。您將需要通過建構式注入應用程式背景關系。
無論如何,就 MVVM 而言,它并沒有說明應該在哪里啟動服務。僅取決于服務要執行的功能。例如,不應從存盤庫啟動音樂服務,因為存盤庫應該連接到資料層。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/428164.html
上一篇:我收到原因:android.view.InflateException:BinaryXMLfileline#32:Errorinflatingclassandroidx.fragment.app.Fr
