Android将数据从IntentService发送到绑定的Activity

时间:2018-09-08 21:36:57

标签: android kotlin android-intentservice

我创建了一个具有与活动绑定的意图服务的android应用。 我关注了this excellent article

但是现在我想从IntentService发送数据以更新我的视图(我的意思是我的活动)。

上下文:我想创建一个简单的倒计时。 该服务例如每分钟或每秒将“时间”发送给活动。

如何将数据从IntentService发送到我的活动?

请在科特林... 谢谢!

1 个答案:

答案 0 :(得分:0)

在Android中,有许多API允许我们将消息从服​​务发送到活动。我们应该使用哪种API取决于服务和活动是否在同一进程中运行。

如果它们在同一进程中运行,那么您有2个选项

  • 通过LocalBroadcastManager使用本地广播。它仅允许应用程序中的组件与其他组件通信。比通过系统发送全球广播更安全,更有效。
  • 如果您不想实现广播接收器,请使用EventBus库。

如果它们在不同的进程中运行,那么您有3个选择

  • 使用Messenger(与Handler结合使用),the VB.NET code: Dim ev As DomEventArgs = GeckoWebBrowser1.Document.CreateEvent("KeyEvents") Dim curInput As GeckoInputElement curInput = GeckoWebBrowser1.Document.GetElementById("field1") curInput.Focus() nsIEventVar.InitKeyEvent(New nsAString("keypress"), True, False, GeckoWebBrowser1.Window.DomWindow, False, False, False, False, Keys.Enter, Keys.NumPad0) nsIEventVar.InitKeyEvent(New nsAString("keyUp"), True, False, GeckoWebBrowser1.Window.DomWindow, False, False, False, False, Keys.Up, Keys.NumPad0) Xpcom.QueryInterface(Of nsIDOMEventTarget)(curInput.DomObject).DispatchEvent(nsIEventVar)将按顺序在单个线程上处理消息。
  • 使用AIDL接口,HandlerMessenger之间的区别是AIDL可以在绑定程序线程上同时执行任务。
  • 通过BroadcastReceiver使用全局广播。