【问题标题】:Android - how properly trigger getExtra()?Android - 如何正确触发 getExtra()?
【发布时间】:2017-11-10 01:59:34
【问题描述】:

我想将putExtra()我的对象变成一个意图,然后将其发送到常驻服务并让它进一步处理该对象。

我已经实现了 parcelable 等,并且我已经完成了putExtra() 代码。现在我遇到了一个问题:我不知道如何使用getExtra() smart-ly

本网站上的大多数示例都是关于 Activity 到 Activity 的通信——也就是说,您将对象或 Parcelable 传递给另一个 Activity 的那一刻就是您启动您的目标 Activity 的那一刻,这意味着您所要做的就是将您的getExtra() 放入 onCreate 方法中,一切就绪。

但正如我提到的,我想要一个常驻服务,这意味着该服务可能会在我发送一个可打包对象之前很久就创建和启动。

当然,我可以实现一个带有延迟计时器的可运行对象,它会定期检查传递给它的意图,但这太麻烦了。此外,我只是拒绝相信 android API 甚至无法检测到putExtra()。我的意思是这似乎不太可能。

那么,每次调用putExtra() 方法时,我应该怎么做才能让我的数据处理服务中的getExtra() 被调用?我的意思是java是一个OOPL,它是事件驱动的,对吧?一定有什么我可以利用的?

【问题讨论】:

    标签: java android android-intent service


    【解决方案1】:

    听起来您希望您的ActivityService 通信。这可以使用绑定服务来解决。 https://developer.android.com/guide/components/bound-services.html

    要使其正常工作,您需要在服务中覆盖onBind,它会返回一个IBinder。如果您的活动和服务都在同一个进程中运行,这相当简单。 https://developer.android.com/guide/components/bound-services.html#Binder

    然后,在您的活动中,您可以通过调用bindService 获得对IBinder 的引用,然后您可以直接调用Service

    【讨论】:

    • 所以没有更简单、更简单的方法来做到这一点?每当我调用 putExtra() 时,我总是触发一些事件吗?
    • 意图只是一个数据对象。当您致电 puExtra 时,外部没有任何反应。如果要触发事件,则必须自己编写该代码。还有其他方法可以做到这一点,包括 LocalBroadcastManager 或第 3 方 EventBus。
    【解决方案2】:

    RxJava 呢?您可以将 Observable 提供到您的服务中并使用数据检查所有更改。

    【讨论】:

    • 哇整个图书馆?对我来说工作量太大?有更好的方法。我把Extra(),我不可避免地触发了一些事件,但我真的不知道它的名字,或者它是否存在。
    猜你喜欢
    • 2021-05-01
    • 2016-01-11
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 2011-06-02
    相关资源
    最近更新 更多