Autore Topic: EventBus - unregister  (Letto 315 volte)

Offline LinkOut

  • Utente normale
  • ***
  • Post: 269
  • Respect: +37
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
EventBus - unregister
« il: 22 Giugno 2015, 10:45:40 CEST »
0
Buongiorno,

Ho un piccolo dubbio su EventBus, in particolare sul metodo .unregister();

Partendo dall'Activity X (che nel metodo onCreate si registra a eventbus con: EventBus.getDefault().register(this);), viene istanziata una nuova classe, alla quale vengono passati alcuni parametri tra cui il Context, la nuova classe ha bisogno di comunicare usando EventBus anch'essa...

La mia domanda è: Se la mia istanza usa EventBus, ha bisogno nuovamente di registrarsi usando il Context dell'Activity X?
Sopratutto, Quando l'activity X nel metodo onDestroy chiede l'unregister: EventBus.getDefault().unregister(this);, automaticamente tutte le classi che usano il suo Context vengono deregistrate?


Grazie.

Offline tonno16

  • Utente storico
  • *****
  • Post: 1186
  • Respect: +57
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:EventBus - unregister
« Risposta #1 il: 22 Giugno 2015, 12:03:12 CEST »
0
Dovresti usare onStop invece che onDestroy() sei sicuro ti serva li? se te dentro la tua activity ti registri. Allora nel metodo onEvent chiami direttamente il metodo della classe. Mettiamo che l'evento ricevuto sia "sommaINuneri" ovvero una stringa, e hai un oggetto del tipo Calcolatrice c " new Calcolatrice(). Allora in onEvent dentro la tua classe fai degli switch case. Se l'evento è esattamente "sommaNumeri" allora chiami c.sumNumbers()

Offline LinkOut

  • Utente normale
  • ***
  • Post: 269
  • Respect: +37
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:EventBus - unregister
« Risposta #2 il: 22 Giugno 2015, 14:06:28 CEST »
0
Ciao, grazie per la risposta... effettivamente ho sbagliato a inserire l'unregister...

Ti faccio un esempio così da farti capire cosa dovrei fare.

Abbiamo l'Activity:

Codice (Java): [Seleziona]
public class EsempioActivity extends AppCompatActivity {
...
 @Override
    public void onStart() {
        super.onStart();
        EventBus.getDefault().register(this); //Qui avviene la registrazione...
    }
        //Da qualche parte...
        AskedEvent ask = new AskedEvent();
        ask.setEventType("esempio");
        EventBus.getDefault().post(ask);
...
}

Codice (Java): [Seleziona]
public class EventManager {

    public void onEvent(AskedEvent event) {
        String eventType = event.getEventType();
        if("esempio".equals(eventType)){
            metodoDiEsempio();
        }
    }
       
        private void metodoDiEsempio(){
         EventBus.getDefault().post("Ciao!");
        }
       
}

In una struttura del genere... Dove tutti gli eventi vengono trattati dalla mia classe EventManager, la quale "Preleva" il tipo di richiesta, lo tratta e risponde...

Se l'activity EsempioActivity demanda ad una classe per esempio "PopolaLaView" di popolare una view, ma tale view può essere popolata solo dopo aver ricevuto "l'OK" da EventManager tramite EventBus, all'unregister di EsempioActivity, i riferimenti usati dalla mia istanza spariscono? Perchè ciò potrebbe causare problemi di OOM.

Grazie