Junior — Middle
Quais são as abordagens existentes para troca de informações entre Fragment e Service no Android?
sobes.tech IA
Resposta da IA
Para trocar informações entre Fragment e Service no Android, pode usar várias abordagens:
- BroadcastReceiver — O Service envia uma mensagem de difusão, e o Fragment subscreve-se a ela.
- Serviço ligado (Bound Service) — O Fragment liga-se ao Service através de um binding e chama os seus métodos diretamente.
- EventBus (por exemplo, a biblioteca Otto ou GreenRobot EventBus) — facilita a troca de mensagens entre componentes.
- Shared ViewModel (se usar arquitetura com ViewModel e LiveData) — pode armazenar dados acessíveis tanto para o Fragment como para o Service.
Exemplo com Bound Service:
// No Fragment
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
MyService.LocalBinder localBinder = (MyService.LocalBinder) binder;
myService = localBinder.getService();
// Agora pode chamar métodos do serviço
}
@Override
public void onServiceDisconnected(ComponentName name) {
myService = null;
}
};
// Ligação ao serviço
getActivity().bindService(new Intent(getContext(), MyService.class), connection, Context.BIND_AUTO_CREATE);
Este método permite chamar diretamente os métodos do serviço a partir do Fragment.