如何通过 activity 从片段访问服务?
How to access a service from a fragment, via its activity?
我有一个 activity,据我所知,每次创建 activity 时它都会愉快地绑定到服务。 activity第一次创建时,也是用startService命令启动服务,如下:
private fun attachRecorderService() {
val intent = Intent(this, AudioRecorderService::class.java)
bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE)
if (!mBooleanRecorderServiceStarted) {
startService(intent)
mBooleanRecorderServiceStarted = true
}
}
activity 的片段都在其 onActivityCreated() 函数中获得对该服务的引用,如下所示:
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val parentActivity = activity as MainActivity
mAudioRecorderService = parentActivity.mAudioRecorderService
第一次创建片段时工作正常,但一旦屏幕旋转,我就收到错误消息,告诉我 activity 中的服务尚未初始化。
lateinit property mAudioRecorderService has not been initialized
据我所知,片段中的 onActivityCreated() 正在与 activity 中的 onCreate() 竞争,并试图在 onCreate() 初始化它之前获取引用.
我不明白。我想 onActivityCreated() 等到 after onCreate() 完成。
我做错了什么?我应该在片段中使用某种回调,只有在 activity 绑定到服务时才会触发吗?我看到有人提到过,但我不知道该怎么做。
问题 Communication between Activity and Service 涉及活动和服务。我问的是附加到 Activity 的片段,以及它们如何访问 Activity 已经绑定的服务。
调用bindService后服务无法直接使用。使用服务连接。当 onServiceConnected 被调用时,服务就可以使用了
private val connection = object : ServiceConnection {
override fun onServiceDisconnected(p0: ComponentName?) {
}
override fun onServiceConnected(p0: ComponentName, binder: IBinder) {
}
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
application.bindService(Intent(application, MyService::class.java), connection, Context.BIND_AUTO_CREATE)
}
我有一个 activity,据我所知,每次创建 activity 时它都会愉快地绑定到服务。 activity第一次创建时,也是用startService命令启动服务,如下:
private fun attachRecorderService() {
val intent = Intent(this, AudioRecorderService::class.java)
bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE)
if (!mBooleanRecorderServiceStarted) {
startService(intent)
mBooleanRecorderServiceStarted = true
}
}
activity 的片段都在其 onActivityCreated() 函数中获得对该服务的引用,如下所示:
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val parentActivity = activity as MainActivity
mAudioRecorderService = parentActivity.mAudioRecorderService
第一次创建片段时工作正常,但一旦屏幕旋转,我就收到错误消息,告诉我 activity 中的服务尚未初始化。
lateinit property mAudioRecorderService has not been initialized
据我所知,片段中的 onActivityCreated() 正在与 activity 中的 onCreate() 竞争,并试图在 onCreate() 初始化它之前获取引用.
我不明白。我想 onActivityCreated() 等到 after onCreate() 完成。
我做错了什么?我应该在片段中使用某种回调,只有在 activity 绑定到服务时才会触发吗?我看到有人提到过,但我不知道该怎么做。
问题 Communication between Activity and Service 涉及活动和服务。我问的是附加到 Activity 的片段,以及它们如何访问 Activity 已经绑定的服务。
调用bindService后服务无法直接使用。使用服务连接。当 onServiceConnected 被调用时,服务就可以使用了
private val connection = object : ServiceConnection {
override fun onServiceDisconnected(p0: ComponentName?) {
}
override fun onServiceConnected(p0: ComponentName, binder: IBinder) {
}
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
application.bindService(Intent(application, MyService::class.java), connection, Context.BIND_AUTO_CREATE)
}