绑定到服务 - 绑定成功后回调 - Android

时间:2014-06-24 16:07:39

标签: android android-service android-service-binding

我已经到了一个我不知道如何做到这一点的优雅方式。

我们说我是Fragment,名为FragmentAService名为BackupService

FragmentA上,我使用了<{1}}

将其绑定到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任务,这就是我的问题所在。

我提出了使用EventBus的想法,但我发现它不优雅,因为片段将发布对象(在本例中为backupBoundService),引用该服务,并且同时将从公交车上收听/接收事件,例如,将发布和接收事件的相同片段(发布给自己)。

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

1 个答案:

答案 0 :(得分:0)

您好,您可以使用eventbus,或者您可以根据需要使用Interfcae创建简单的回叫方法。

如果您不想使用界面创建回叫,请查看此段代码。 它与eventbus相同:)

  // 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
 }

}   

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