在这个例子中,Firebase onDataChange() 运行 在哪里?

Where will Firebase onDataChange() run in this example?

我知道 Firebase 中的 onDataChange() 让我们说 addListenerForSingleValueEvent 上 运行ning。

我想了解如果我 运行 ExecutorService:

中的这段代码会发生什么
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;
                         }
                     }
                    );
}
});
}

Android 中的主 Ui 线程上的 onDataChange() 仍然 运行 吗? 这是 ExecutorService 运行ner

/**
 * 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();
            }
        }
    });
}

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

侦听器回调总是在 main/UI 线程上 运行。用于添加侦听器的线程不会影响回调线程。您可以通过向输出线程名称的回调添加日志语句来确认这一点:

Log.d(TAG, "onDataChange: Thread=" + Thread.currentThread().getName());