如何从一个服务(Service)向活动(Activity)发起回调(callback)

4

很抱歉再次打扰您,但我仍然找不到一种从我的活动到服务的回调方法...

发现一个类似的问题 - 如何在Android中定义回调?

// The callback interface
interface MyCallback {
    void callbackCall();
}

// The class that takes the callback
class Worker {
   MyCallback callback;

   void onEvent() {
      callback.callbackCall();
   }
}

// Option 1:

class Callback implements MyCallback {
   void callback() {
      // callback code goes here
   }
}

worker.callback = new Callback();

但我不确定如何将这个示例集成到我的项目中。

有任何建议或链接可以提供清晰的教程都是非常好的!


把服务绑定到你的活动上,然后调用它的方法,这样你就不需要使用观察者模式了。 - lstipakov
请问,我该如何绑定它以便能够调用那个方法? - Roger
1
http://developer.android.com/reference/android/app/Service.html#LocalServiceSample 下面是客户端代码示例,您可以将其放入您的活动中。 - lstipakov
1个回答

12
你展示的那种回调(观察者模式)在服务和活动之间不起作用。当你从A类创建B类的实例并希望从B向A发送回调时,请使用观察者模式。
关于服务和活动,事情完全不同。据我所知,如果你想从服务回调你的活动,则最好的方法是使用ResultReceiver。关于ResultReceiver有很多有趣的事情:
  • 它的构造函数接收一个Handler(你必须在活动中创建),这将允许你从服务更改UI。
  • 它实现了Parcelable,因此你可以将ResultReceiver的引用放入你用来启动服务的Intent extras中。
  • 它的onReceive方法具有结果代码整数,允许你生成不同类型的回调(这就像你的回调接口有许多方法一样)。此外,它接收一个Bundle,你可以用它来存储所有结果数据。
另一方面,如果你想要在你的Activity和Service之间进行回调(不确定这是否是正确的术语),我猜你需要发送广播消息或类似的东西。

1
太好了,谢谢!如果可能的话,一个简短的代码片段会很棒 :) - Roger
1
我现在有些疑惑。你是想回调Activity还是Service? - Cristian
我想从一个活动中调用一个服务。 - Roger
尝试这个,类似于上面的答案但带有示例 :) https://dev59.com/p2w15IYBdhLWcg3w1vOB#6371332 - dharmendra

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