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;
}
});