【问题标题】:How to send data back and forth between an activity and a service locally如何在本地活动和服务之间来回发送数据
【发布时间】:2010-08-13 14:24:12
【问题描述】:

我对 Android 有点陌生。我需要做的是在本地活动和服务之间来回发送数据。发送的信息属于敏感信息,不得被其他应用获取。如果我理解正确,这不包括使用广播和 onBind() 函数?

所以活动需要向服务发送一些字符串参数。它还需要以某种方式告诉服务哪个活动启动了它,以便服务可以回复正确的类,因为许多不同的活动将使用该服务。一旦服务通过 http 请求获取了信息,它就会将该数据(只是一个稍后将被解析的长字符串)发送回启动它的活动。我该怎么做呢?使用静态变量/函数不是一个选项,因为许多活动将再次使用此服务。当然可以使用静态数组来保存类,但这看起来很丑……只能通过意图发送简单的变量(而不是对象)?必须有更好的方法来做到这一点。我已经在网上冲浪了好几个小时了。任何帮助将不胜感激。

编辑

在 Android Developers [http://developer.android.com/reference/android/app/Service.html#stopSelf(int)] 上找到的示例对实现本地绑定器有很大帮助。

对于那些感兴趣的人,这里有一些关于我迄今为止的实施的更多信息。

  1. 一旦调用 onServiceConnected 函数,就会调用服务中的函数来设置它绑定到的活动。之后,服务和活动都可以来回交互。
  2. 确保服务类中的线程具有处理程序。这使线程能够在完成其任务后向其处理程序发送消息。然后,处理程序将结果从服务发送回其绑定的活动。通过处理程序执行此操作可确保完成此操作后应用程序返回主线程。

【问题讨论】:

    标签: android android-intent android-activity service


    【解决方案1】:

    如果我理解正确,这不包括使用广播和 onBind() 函数?

    客户端和服务之间通过本地 Binder 交换的数据是 JVM 中的本地方法调用。

    如果您支持 API 级别 4 及更高级别,您还可以在 Intent 上使用 setPackage() 以安全地将广播发送到特定包。

    我该怎么做?

    在与startService()bindService() 一起使用的Intent 上添加额外内容。或者调用本地Binder上的方法。

    【讨论】:

    • 为回答干杯!一旦你说可以信任它只能在本地运行,我就选择了本地活页夹。
    猜你喜欢
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    相关资源
    最近更新 更多