我通过手动绑定并使用其方法启动前台服务。
然而,我最近遇到Koin,发现https://insert-koin.io/docs/reference/koin-compose/compose
@Composable
fun App(myService: MyService = koinInject()) {
}
字符串
现在,这给了我一个想法,Koin将为我做绑定,我将能够直接使用服务的方法,而无需使用ServiceConnection
绑定和取消绑定服务
但是我明白
java.lang.NullPointerException: class name is null
型
在startForeground呼叫内部服务。
并且,
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
型
任何超级会员的电话。
现在,要么 * 我没有正确设置Koin*,要么Koin不支持Service
(* 即使我手动绑定它,但使用Koin的服务示例仍然会崩溃,同样的问题 *)。
我想听听Maven的意见,因为文档中提到了MyService,但是不能使用SuperClass的“Service”成员似乎是一个糟糕的类名选择。
2条答案
按热度按时间pftdvrlh1#
koin docs中的
MyService
示例不是一个android服务,它是一个包含业务逻辑的服务。service
、usecases
是在干净架构中保存业务逻辑的域层类的可互换名称。你可以用传统的方式绑定你的android服务。p8h8hvxi2#
Koin不会处理Android服务生命周期或为您启动前台服务。你仍然需要自己处理这些方面。
如何使用Koin对前台服务进行依赖注入的示例:
设置koin模块
字符串
在Application类中初始化Koin
型
}
您的Gradle
型
在Composable函数中,可以使用koin.get()注入服务并直接使用它
型
请记住,Koin不处理Android组件(如Activity或Services)的生命周期。您需要显式地启动和停止服务,可以手动启动或通过其他组件(例如Activities、BroadcastReceivers)启动和停止。