从服务到活动的沟通

时间:2013-10-18 14:38:47

标签: android android-intent

我在我的Activity中按照以下方式启动服务。服务启动后,我关闭活动。如果我再次启动Activity,我想从服务中收到一些信息。我怎么能这样做?

// Activity

@Override
public void onCreate(Bundle savedInstanceState) 
{
   // here I want to receive data from Service
}

Intent i=new Intent(this, AppService.class);

i.putExtra(AppService.TIME, spinner_time.getSelectedItemPosition());

startService(i);


// Service

public class AppService extends Service {

  public static final String TIME="TIME";

  int time_loud;

  Notification note;
  Intent i;

  private boolean flag_silencemode = false;


  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {


    time_loud = intent.getIntExtra(TIME, 0);

    play(time_loud); 

    return(START_NOT_STICKY);
  }

2 个答案:

答案 0 :(得分:2)

现在最简单的解决方案是,恕我直言,使用第三方事件总线,如Square's Otto(使用@Producer允许活动获取给定类型的最后发送事件)或greenrobot's EventBus(使用粘性事件允许活动获取给定类型的最后发送事件)。

答案 1 :(得分:2)

我建议使用Square的Otto库。

  

Otto是一种活动总线,旨在解耦您的不同部分   申请,同时仍然允许他们有效沟通。

简单的方法是创建一个总线:

Bus bus = new Bus();

然后你只需发布一个事件:

bus.post(new AnswerAvailableEvent(42));

您的Service订阅

@Subscribe public void answerAvailable(AnswerAvailableEvent event) {
    // TODO: React to the event somehow!
}

然后服务将提供结果

@Produce public AnswerAvailableEvent produceAnswer() {
    // Assuming 'lastAnswer' exists.
    return new AnswerAvailableEvent(this.lastAnswer);
}