通常,我可以使用代码B通过Hilt自动创建示例。
Code A中有一个Android Studio的Service类,我可以使用Hilt创建Service的示例吗?
代码A
class RecordService : Service() {
private val CHANNEL_ID ="channel__voice_record"
private var mRecorder: MediaRecorder? = null
override fun onBind(intent: Intent): IBinder {
return MyBinder()
}
inner class MyBinder : Binder() {
val service: RecordService
get() = this@RecordService
}
...
}
fun bindService() {
Intent(mApplication , RecordService::class.java).also { intent ->
mApplication.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE)
}
}
fun unbindService() {
Intent(mApplication, RecordService::class.java).also { intent ->
mApplication.unbindService(serviceConnection)
mService?.stopForeground(true)
mService?.stopSelf()
}
}
代码B
@InstallIn(SingletonComponent::class)
@Module
abstract class SoundModule {
@Binds
abstract fun bindIHandleMeter(impl: HandleMeter): IHandleMeter
}
@InstallIn(SingletonComponent::class)
@Module
object ObjectModule {
@Provides
@Singleton
fun provideMediaPlayer(): MediaPlayer {
return MediaPlayer()
}
}
新增内容
致米哈伊尔·古里亚耶夫:谢谢!
但是从article,似乎Service
类可以被Hilt自动示例化,你可以看到图像。
图片
新增内容
致米哈伊尔·古里亚耶夫:再次感谢!
我可以使用代码C而不添加代码@AndroidEntryPoint
吗?
代码C
class RecordService @Inject constructor(
private val translateService: ITranslateService
): Service() {
...
}
还有,Hilt能在Code C中自动创建RecordService的示例吗?我能像代码D一样使用Hilt创建的示例吗?
代码D
@AndroidEntryPoint
class ActivityMain : ComponentActivity() {
@Inject lateinit var recordService RecordService
...
}
1条答案
按热度按时间t0ybt7op1#
您不能自己创建Activity组件的示例(这没关系,它将由您在代码中创建或由Hilt模块提供)。确切地说,您将能够创建
Service
类的示例,但无法正确使用它。当您调用
Context.startActivity(intent: Intent)
或Context.startService(intent: Intent)
方法时,Android系统正在创建Activity
和Service
示例。这是启动这些Android组件的唯一正确方法。更新
关于你的截图的更新。对
Service
的支持意味着你可以用@AndroidEntryPoint
注解来标记你的Service
类,告诉hilt将依赖注入到你的Service
类中。看看下面这个片段。在这里,通过使用@AndroidEntryPoint
注解标记您的服务,您告诉Hilt将属性注入到这个类中,因此someRecorder
变量将由Hilt注入到您的RecordService
中。更新№2不,您不能使用代码片段C中的代码。因为正如我上面所描述的,Android系统在后台自动创建
Service
类。在我上面的代码中可以看到对Service
的参数的正确注入。但是你可以使用来自
Snippet D
的代码。因为Activty将由Android创建,然后@AndroidEntryPoint
注解告诉Hilt
注入标有@Inject
注解的参数