【问题标题】:How to send intent from a fragment to a service without restarting the service如何在不重新启动服务的情况下将意图从片段发送到服务
【发布时间】:2021-05-13 16:34:23
【问题描述】:

我有服务和片段。片段启动服务,片刻之后我想在服务上调用一个方法而不重新启动服务。该怎么做?

【问题讨论】:

  • 您可以使用 LocalBroadcastManager API 来实现您的场景。 blog.mindorks.com/using-localbroadcastmanager-in-android
  • 有没有办法从正在运行的服务中调用片段上的方法,而无需创建片段对象?
  • 服务是否正在运行,您的片段是否同时可见?
  • Btw LocalBroadcastManager 已弃用。
  • 我基本上在服务上运行了一个倒计时计时器,我想从片段中调用方法并获取它们的值。

标签: android android-intent service


【解决方案1】:

您可以将Livedata 从您的Service 类公开给Fragment 类。

在您的Service 类中,您将拥有一个类似这样的LiveData 属性的类实例(下面的代码在Kotlin 中):

class MyService : Service() {
    companion object {
        private val _events = MutableLiveData<PUT YOUR VALUE HERE>()
        val events : LiveData<PUT YOUR VALUE HERE> = _events
    }

    // somewhere in service's method, change the value of _events
    _events.postValue( /* post your value here */ )
}

注意:对于Java,您可以从上面的代码中获得_eventsevents 的静态属性。

在您的Fragment 类中,从Service 访问events 属性

class MyFragment : Fragment() {
    // somewhere in your fragment's method, access the _events of MyService
    MyService.events.observe(viewLifecycleOwner,  Observer { yourValue ->
           // do something with your value
    })
}

作为参考,请查看link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多