我正在使用 Mosby 创建一个小应用程序。
该应用程序具有我要绑定的服务。我想这样做的正确位置是在演示者中。但我真的不知道该怎么做。
我要存档的是当服务绑定时我想在其上调用一个方法并将该值推送到视图,以便现在的状态是正确的。
当服务在事件总线上发送更新时,我也想将其推送到视图。
我在后面的部分找到了一些示例,但没有关于如何在演示者中绑定/取消绑定服务。
我对它的尝试是在活动中创建这样的东西:
@NonNull
@Override
public MyPresenter createPresenter() {
return new MyPresenter(new MyService.ServiceHandler() {
@Override
public void start(ServiceConnection connection) {
Intent intent = new Intent(MyActivity.this, MyService.class);
startService(intent);
bindService(intent, connection, Context.BIND_AUTO_CREATE);
}
@Override
public void stop(ServiceConnection connection) {
unbindService(connection);
}
});
然后在演示者中执行以下操作:
private ServiceConnection connection;
private boolean bound;
private MyService service;
public MyPresenter(MyService.ServiceHandler serviceHandler) {
super(new MyViewState.NotInitialiezedYet());
this.serviceHandler = serviceHandler;
connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
MyService.LocalBinder binder = (MyService.LocalBinder) service;
service = binder.getService();
bool isInitialized = service.isInitialized();
// how do i push isInitialized to view?
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
}
};
}
@Override
public void attachView(@NonNull SplashView view) {
super.attachView(view);
serviceHandler.start(connection);
bound = true;
}
@Override
public void detachView(boolean retainInstance) {
super.detachView(retainInstance);
if(bound) {
serviceHandler.stop(connection);
bound = false;
}
}
@Override
protected void bindIntents() {
//Not sure what this would look like?
}
public void onEventInitialized(InitializedEvent event) {
//how do I push this to the view?
}
我在正确的道路上吗?这样做的正确方法是什么?我如何将服务中的值发送到 onServiceConnected 中的视图以及当我在 onEventInitialized 中的事件总线上获取事件时?