Quando viene richiamato un listener di eventi durante l'esecuzione del programma?

1

Sto usando il modello Obervable-Observer.

MyClass extends Observable{

  invokeListeners(){
     doSomething;
     setChanged();
     notifyListeners();//This invokes onUpdate() in "implements Observer" 

     return value;
  }
}

ClassTwo implements Observer{

   onUpdate(){
      //This is called after notifyListeners();
   }
}

La mia domanda è quando verrà richiamato il metodo onUpdate nella classe Listener? Dopo che i metodi invokeListeners() sono stati completati, o subito dopo notifyListeners() ?

    
posta Akshayraj Kore 16.06.2015 - 19:06
fonte

3 risposte

2

Nell'implementazione di

notifyListeners();//This invokes onUpdate() in "implements Observer"

normalmente è un ciclo su tutti gli osservatori registrati.

In questo ciclo è normalmente una chiamata diretta a

onUpdate()

su ciascun osservatore registrato.

Assicurati di non bloccare l'esecuzione nell'implementazione di

onUpdate()
    
risposta data 16.06.2015 - 19:35
fonte
2

In generale, notifyListeners è implementato come una lista di delegati / osservatori che sono semplicemente vecchie funzioni che vengono chiamate in ordine. Quindi le funzioni dell'osservatore saranno generalmente invocate durante la chiamata di notifyListeners (come il tuo commento implica).

Esistono diverse implementazioni possibili, alcune che vengono eseguite in parallelo in thread in background, alcune che inviano la richiesta a una coda, ma la chiamata diretta è la più comune.

    
risposta data 16.06.2015 - 19:56
fonte
0

Per controllare lo stacktrace, ho incrementato un int statico nel metodo update () di tutti i listener.

Ho aggiunto un System.out.println () nel metodo in cui chiamo notifyListeners () e nei metodi update () degli ascoltatori per vedere il valore dello statico. Di seguito sono riportati i valori di stacktrace -

public static int observer = 0; // Initialized

StackTrace: Dopo NotifyListeners: 0 In update (): 1 In update (): 2 In update (): 3

Questo implica che il metodo con cui viene effettuata la chiamata a notifyListeners (), prima completa la sua esecuzione e dopo che i metodi update () nell'Observer vengono chiamati in un ciclo.

    
risposta data 17.06.2015 - 02:32
fonte