android服务如何与活动交互

时间:2012-02-24 10:58:04

标签: android service

我正在开发一个地铁指南应用程序,当到达新工作站时,会弹出一个通知,主活动中显示的地图将刷新。我将指南代码放在一个服务中,以便用户可以在被引导的同时运行其他应用程序。但是当到达新站时,主要活动需要刷新,服务如何对主要活动中的视图进行一些更改?

3 个答案:

答案 0 :(得分:1)

在您的活动中,您应该注册一个接收器

首先声明接收器

public class ReceiverTest extends BroadcastReceiver
{
  @Override
  public void onReceive(Context context, Intent intent)
  {
     // extras from service
     int key = intent.getIntExtra("key", 0);

     //do things here
  }
}

在活动的OnCreate中注册

ReceiverTest mReceiver = new ReceiverTest();
IntentFilter filter;
filter = new IntentFilter("packagename.dosomething");
registerReceiver(mReceiver, filter);

然后,在您的服务中,广播事件

Intent i = new Intent("packagename.dosomething");
// You could put the information in extras, then get the value in receiver
i.putExtra("key", 123);
context.sendBroadcast(i);

答案 1 :(得分:1)

有几种方法可以做到这一点。 您可以将服务与活动绑定。 您可以向活动发送广播消息(活动需要向广播接收者注册) 关于这个主题有很多讨论。你可以通过它们。

答案 2 :(得分:-1)

在服务S和活动A之间共享数据的最佳方式

使用本地绑定模式并将Activity A绑定到Service S,然后调用服务的公开API以检索所需的任何内容。

外部活动B如何与服务S通信以确定它是否已完成所有预处理,并且活动A已准备好被调用?

使用远程绑定模式和AIDL。活动B将使用服务S注册AIDL定义的回调,服务将在适当时调用。有关示例,请参阅herehere