【问题标题】:starting a service and returning data启动服务并返回数据
【发布时间】:2012-02-03 20:51:00
【问题描述】:

今天我正在学习 Intents 并将 Activity 绑定到服务,我发现将数据从服务传输到 Activity 非常简单且很棒。我想测试一个将启动服务的活动,该服务将调用网页以获取一些数据。我将活动绑定到服务,以便活动可以调用服务方法,然后烘烤结果。在服务方法中,我调用网页并返回数据。当我测试它时,我得到一个空指针异常,我很确定我没有以正确的方式做这件事,有没有人有任何建议如何正确实现它。

【问题讨论】:

  • 如果没有看到代码的某些部分,就无法分辨。
  • 接下来知道崩溃发生在哪里会很有帮助,而不是让我们在大海捞针:)。
  • 我在活动类中遇到空指针异常,for 循环所在的位置,这一定意味着返回的向量中没有任何内容,因此服务永远不会向向量添加任何内容

标签: android android-intent android-service


【解决方案1】:

您正在处理一些相当可靠的线程同步问题。注册某种侦听器范例会更好,这样您就可以将 Activity 注册为 Service 正在生成的数据的侦听器。就目前而言,您的 Service 和 Activity 之间根本没有同步,导致 Activity 试图在它们准备好之前从 Service 获取结果。有大量资源讨论侦听器模式或观察者模式。

我应该注意,我不知道你的服务是否真的正确地把事情拉下来。我只是在看你们两人之间的交流。

【讨论】:

  • 我知道这里有很多线程问题,我第一次搞砸了意图然后打算研究处理程序,但看起来我应该第一次解决线程问题
【解决方案2】:

从服务返回结果时,最好在你的activity中实现ResultReceiver接口,并通过putExtra将receiver对象传递给服务。在您的服务中获取接收者对象并调用 receiver.send() 函数来发送 Bundle 中的任何内容。 [我至少在 IntentService 中测试过这种模式]。

编辑:查看this 帖子以了解完整实施。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2011-05-08
    • 2020-09-03
    • 2017-06-17
    • 1970-01-01
    相关资源
    最近更新 更多