0

Ich kenne die onDataChange() in Firebase für zB addListenerForSingleValueEvent läuft auf Android Main Ui thread.Wo wird Firebase onDataChange() in diesem Beispiel ausgeführt?

Ich wollte verstehen, was passiert, wenn ich diesen Code in der ExecutorService laufen:

runInBackground(new Runnable() { 
@Override 
public void run() { 
    ref.child("SOME_KEY") 
      .addListenerForSingleValueEvent 
        (new ValueEventListener() { 
         @Override 
         public void onDataChange(final DataSnapshot dataSnapshot) { 
          //.. do some work on Ui Thread or not?? 
         } 

         @Override 
         public void onCancelled(DatabaseError databaseError) { 
          notificationRunning = false; 
         } 
        } 
        ); 
} 
}); 
} 

Wird die OnDataChange() immer noch laufen am Main Ui Thema in Android? Und Heres die ExecutorService Läufer

/** 
* Submits request to be executed in background. 
* Threads submitted will be executed synchronously. 
* 
* @param runnable 
*/ 
private void runInBackground(final Runnable runnable) { 
    mBackgroundExecutor.submit(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       runnable.run(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

Und die ExecutorService

mBackgroundExecutor = Executors 
     .newSingleThreadExecutor(new ThreadFactory() { 
      @Override 
      public Thread newThread(Runnable runnable) { 
       Thread thread = new Thread(runnable, 
         "Background executor service for OneSignal"); 
       thread.setPriority(Thread.MIN_PRIORITY); 
       thread.setDaemon(true); 
       return thread; 
      } 
     }); 

Antwort

1

Die Zuhörer Rückrufe laufen immer auf der Haupt/UI-Thread. Der Thread, der zum Hinzufügen des Listeners verwendet wurde, wirkt sich nicht auf den Callback-Thread aus. Sie können dies bestätigen, indem Sie eine Log-Anweisung zu Ihrem Callback hinzufügen, der den Thread-Namen ausgibt:

Verwandte Themen