我已经到了不知道如何优雅地做到这一点的地步。
假设我有一个Fragment
, namedFragmentA
和一个Service
namedBackupService
在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
),引用服务,同时会监听/接收来自总线的事件,例如,将是相同的片段发布和接收事件(发布给自己)。
当片段绑定到它时,是否有一种优雅的方式来获取正在运行的服务的引用?我很确定这种情况有一个模式,但到目前为止我一直在谷歌搜索和搜索这里没有运气。