Sobes.tech
Junior — Middle

Jaké přístupy existují pro výměnu informací mezi Fragment a Service v Androidu?

sobes.tech AI

Odpověď od AI

Pro výměnu informací mezi Fragmentem a Service v Androidu lze použít několik přístupů:

  1. BroadcastReceiver — Service vysílá broadcast zprávu, na kterou se Fragment přihlásí.
  2. Bound Service — Fragment se připojí ke Service přes binding a volá její metody přímo.
  3. EventBus (například knihovna Otto nebo GreenRobot EventBus) — usnadňuje výměnu zpráv mezi komponentami.
  4. Shared ViewModel (pokud se používá architektura s ViewModel a LiveData) — lze ukládat data, která jsou dostupná jak pro Fragment, tak pro Service.

Příklad s Bound Service:

// V Fragmentu
private ServiceConnection connection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder binder) {
        MyService.LocalBinder localBinder = (MyService.LocalBinder) binder;
        myService = localBinder.getService();
        // Nyní lze volat metody servisu
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        myService = null;
    }
};

// Připojení ke službě
getActivity().bindService(new Intent(getContext(), MyService.class), connection, Context.BIND_AUTO_CREATE);

Tato metoda umožňuje přímo volat metody servisu z Fragmentu.