【发布时间】:2017-04-03 11:04:26
【问题描述】:
我知道 Firebase 中的 onDataChange() 假设 addListenerForSingleValueEvent 在 Android Main Ui thread 上运行。
我想了解如果我在 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;
}
}
);
}
});
}
onDataChange() 是否仍会在 Android 的主 UI 线程上运行?
这是ExecutorService runner
/**
* 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;
}
});
【问题讨论】:
标签: android multithreading firebase firebase-realtime-database executorservice