0

我已经到了不知道如何优雅地做到这一点的地步。

假设我有一个Fragment, namedFragmentA和一个ServicenamedBackupService

FragmentA我将它绑定到BackupService使用:

private ServiceConnection backupServiceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName className, IBinder service) {
        // We've bound to LocalService, cast the IBinder and get LocalService instance
        LocalBinder binder = (LocalBinder) service;
        backupBoundService = binder.getService();
        isBound = true;
        // How to let the fragment know this has happened?
        // Use an eventBus? EventBus.getDefault().post(backupBoundService); ?
        Log.d(TAG, "On Service Connected -> Yup!");
    }

    @Override
    public void onServiceDisconnected(ComponentName arg0) {
        isBound = false;
    }
};

和:

Intent intent = new Intent(ApplicationContextProvider.getContext(), BackupsService.class);
ApplicationContextProvider.getContext().bindService(intent, backupServiceConnection, Context.BIND_AUTO_CREATE); // Using application context

现在我知道绑定是一项asynchronous任务,这就是我的问题所在。

我想出了使用 an 的想法,EventBus但我觉得它并不优雅,因为片段会发布对象(在这种情况下backupBoundService),引用服务,同时会监听/接收来自总线的事件,例如,将是相同的片段发布和接收事件(发布给自己)。

当片段绑定到它时,是否有一种优雅的方式来获取正在运行的服务的引用?我很确定这种情况有一个模式,但到目前为止我一直在谷歌搜索和搜索这里没有运气。

4

1 回答 1

0

嗨,您可以使用 eventbus,也可以根据您的要求使用 Interfcae 创建简单的回调方法。

如果您不知道使用接口创建回调,请查看这段代码。它和事件总线一样 :)

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

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

  void onEvent() {
  callback.callbackCall();
  }
  public void setCallBack(MyCallback callback)
     this.callback=callback;
  }
 /////////////////////////////
class Callback implements MyCallback {

  ....
 Worker worker= new Worker()
 Worker.setCallback(this);      
 .. .

  void callbackCall() {
  // callback code goes here
  //onEvent this method will execute
 }

}   

希望这会有所帮助。祝你好运 :)

于 2014-06-24T16:54:12.500 回答