External Service Bind Use Case
Hi guys, i'm trying to implement the clean architecture into a big Android enterprise project since it fits perfectly in our needs. The only obscure thing it's about bind/unbind to external service (which expose an API trough AIDL). My question is: where the bind/unbind calls goes?
Our external services acts like a repository (method call -> callback with result) but it could push some data to the app occasionally (callback only).
So, in the use case where we pull data from service, this could fit into the data layer... about the second use case, when the service needs to push data, this goes in the data layer as well since some obeservable could notify about the changes to the service data (we use a memory cache which, once updated, notify about the new state).
In any way, for both to work this way, we need to bind to the external service interface: it's right to write use cases to handle this scenarios (like (un)registerForDataUpdates)?
public class ExternalServiceBinder {
private Context context;
private IExternalService externalService;
private ServiceConnection serviceConnection;
public ExternalServiceBinder(Context context) {
this.context = context;
this.serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
externalService = IExternalService.Stub.asInterface(service);
// Notify listeners or perform actions after service is connected
}
@Override
public void onServiceDisconnected(ComponentName name) {
externalService = null;
// Handle disconnection
}
};
}
public void bindService() {
Intent intent = new Intent(context, ExternalService.class);
context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
}
public void unbindService() {
context.unbindService(serviceConnection);
}
public IExternalService getService() {
return externalService;
}
}
Oke thank u
On Tue, Sep 3, 2024 at 7:25 AM ljluestc @.***> wrote:
public class ExternalServiceBinder { private Context context; private IExternalService externalService; private ServiceConnection serviceConnection;
public ExternalServiceBinder(Context context) { this.context = context; this.serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { externalService = IExternalService.Stub.asInterface(service); // Notify listeners or perform actions after service is connected } @Override public void onServiceDisconnected(ComponentName name) { externalService = null; // Handle disconnection } }; } public void bindService() { Intent intent = new Intent(context, ExternalService.class); context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE); } public void unbindService() { context.unbindService(serviceConnection); } public IExternalService getService() { return externalService; }}
— Reply to this email directly, view it on GitHub https://github.com/android10/Android-CleanArchitecture/issues/91#issuecomment-2325410322, or unsubscribe https://github.com/notifications/unsubscribe-auth/AA5BK6J3TD5U362NJF4ZKQTZUT6Y7AVCNFSM6AAAAABNRBSSOGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGMRVGQYTAMZSGI . You are receiving this because you are subscribed to this thread.Message ID: @.***>