Android 活动 - 远程服务 AIDL 双向连接

10

我有两个问题:

  1. 我知道连接activityremote-service需要使用AIDL,我尝试了一下,它可以工作,但我只能找到一种单向连接的例子。简单来说 - 通过活动从服务中读取一些内容。但我需要解决发送一些数据到 activity(由服务发送或接收)。这非常重要,因为服务必须在某些事件之后立即向活动发送一些信息(从网络获取数据)。
  2. 是否有方法从远程服务中再次将已关闭的应用程序(活动)带到前台?

如果您有任何建议,将不胜感激。

问候

Artik

2个回答

9
重要的原因在于服务必须在某些事件(从网络获取数据)后立即向活动发送一些信息。您可以使用AIDL进行双向通信。您需要通过AIDL公开不仅服务接口,而且是回调接口,并使客户端具有回调的`.Stub`,并在服务接口的方法参数中提供其实例。这有点复杂 - 这里是我的书中演示该技术的一对示例应用程序: 您的服务可以调用`startActivity()`,但通常这是一个坏主意。当用户正在做其他事情时,您的活动突然弹出到前台。偶尔,用户可能认为您的活动更重要,但并非总是如此。考虑改用`Notification`,以让用户知道您的应用程序中有需要用户关注的内容。

2
更新链接: https://github.com/commonsguy/cw-omnibus/tree/master/Binding/Remote - Sourab Sharma
回调的实际示例在此处 https://github.com/commonsguy/cw-omnibus/tree/master/Binding/Callback - aramadia

1
首先,在您的服务中创建一个私有resultreceiver变量。然后创建一个方法,通过连接的活动来设置这个resultreceiver。接下来使用AIDL通过您刚刚创建的方法从活动向正在运行的服务传递resultreceiver。如果resultreceiver不为空,则在服务中使用resultreceiver.send。以下是一些示例以帮助您入门:http://lalit3686.blogspot.com/2012/06/how-to-update-activity-from-service.html?m=1

http://chrisrisner.com/31-Days-of-Android--Day-28–Intents-Part-3--Service-Intents


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接