我已经到了一个我不知道如何做到这一点的优雅方式。
我们说我是Fragment
,名为FragmentA
,Service
名为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
),引用该服务,并且同时将从公交车上收听/接收事件,例如,将发布和接收事件的相同片段(发布给自己)。
当片段受限时,是否有一种优雅的方式来获取正在运行的服务的引用?我非常确定这种情况有一种模式,但到目前为止我一直在谷歌搜索并搜索没有运气。
答案 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
}
}
希望这会有所帮助。 祝你好运:)