![]() |
1
82
与服务通信有三种明显的方式:
在你的情况下,我会选择3。对它自己的服务进行静态引用,并将其填充到onCreate()中:
生成静态函数
然后在
您需要做的最后一件事是删除对中侦听器对象的引用
注意:只有当应用程序/活动/任务是唯一访问您的服务的进程时,此方法才有用。如果不是这样,您必须使用选项1。或2。 |
![]() |
2
243
询问者可能很久以前就离开过这里了,但如果有人搜索这个… 还有另一种方法来处理这个问题,我认为这可能是最简单的方法。 在活动中添加广播接收器。注册它以在onresume中接收一些自定义意图,并在onpause中注销它。然后,当您想发送状态更新或您拥有的内容时,从您的服务中发送这个意图。 如果其他应用程序听取了你的意图,确保你不会不高兴(有人会做任何恶意的事情吗?)但除此之外,你应该没事。 请求代码示例: 为我服务,我有:
(refreshtask.refresh_data_intent只是一个常量字符串。) 在我的听力活动中,我定义了我的广播接收器:
我宣布我的接受者在班上名列前茅:
我覆盖了OnResume添加:
我覆盖onpause添加:
现在,我的活动正在监听我的服务说“嘿,去更新你自己。”我可以按意图传递数据,而不是更新数据库表,然后返回到我的活动中查找更改,但是由于我希望更改仍然存在,所以通过DB传递数据是有意义的。 |
![]() |
3
37
使用
http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html |
![]() |
4
18
|
![]() |
5
18
使用信使是在服务和活动之间进行通信的另一种简单方法。 在活动中,使用相应的信使创建一个处理程序。这将处理来自您服务的消息。
通过将信使附加到消息,可以将其传递给服务:
完整的示例可以在API演示中找到: MessengerService and MessengerServiceActivity . 有关myService的工作方式,请参阅完整的示例。 |
![]() |
6
7
其他注释中没有提到的另一个方法是使用bind service()从活动绑定到服务,并在serviceConnection回调中获取该服务的实例。如本文所述 http://developer.android.com/guide/components/bound-services.html |
![]() |
7
2
另一种方法是通过活动和服务本身使用假模型类的观察者,实现MVC模式变体。我不知道这是否是实现这一目标的最佳方式,但这是我的工作方式。如果你需要一些例子的话,我会贴一些东西。 |
![]() |
8
2
要跟进@mrsnowflake,请用代码示例回答。
This is the XABBER now open source
通过
|
![]() |
9
1
您也可以使用
然后从您的
你可以从中了解更多 blog. |
![]() |
10
0
如Madhur所述,您可以使用总线进行通信。 在使用总线的情况下,您有一些选择: Otto事件总线库(已弃用,取而代之的是RxJava) 绿色机器人的eventbus http://greenrobot.org/eventbus/ nybus(rxbus,使用rxjava实现。非常类似于eventbus) |
![]() |
11
0
另外 本地广播管理器、事件总线和通讯器 已经回答了这个问题,我们可以使用 待定意图 从服务中沟通。 如前所述 here 在我的博客文章中
|
![]() |
12
0
我的方法: 用于管理从/到服务/活动的发送和接收消息的类:
在活动示例中:
在用示例:
从活动/服务发送消息:
工作原理:在启动或绑定服务的活动上。 服务“onbind”方法将绑定器返回给其messagemanager,在活动中,通过“service connection”接口方法实现“onserviceconnected”,您将得到这个ibinder并使用它初始化messagemanager。 在活动初始化其messagemanager之后,messagehandler将向服务发送和握手,以便它可以设置其“messagehandler”发送方(messagemanager中的“private messagenger mmsgssender”)。这样做,服务人员就知道是谁发送了他的信息。 您还可以使用messagemanager中的messenger“sender”列表/队列来实现此功能,这样您就可以向不同的活动/服务发送多条消息,或者使用messagemanager中的messenger“receiver”列表/队列来接收来自不同活动/服务的多条消息。CES。 在“messagemanager”实例中,您有一个接收到的所有消息的列表。 如您所见,使用此“messagemanager”实例的“活动的信使”和“服务信使”之间的连接是自动的,它是通过“onServiceConnected”方法和使用“握手”来完成的。 希望这对你有帮助:)非常感谢! 再见:D |
![]() |
user1202032 · Android后台服务位置更新和打盹 7 年前 |
![]() |
Magobin · 从服务启动的通知不会在单击时打开应用程序 7 年前 |
![]() |
firienn · 活动和服务:关于刷卡行为 7 年前 |
|
user7060819 · 服务能否绑定到多个组件? 7 年前 |