FireStore anyQuery.onComplete() 将始终在主线程上运行?这很奇怪

FireStore anyQuery.onComplete() will always run on main thread ? That's weird

提问人:hina abbasi 提问时间:6/28/2020 最后编辑:Ashishhina abbasi 更新时间:6/28/2020 访问量:115

问:

class ExampleThread extends  Thread {
        @Override
        public void run() {
            Log.d(TAG, "ExampleThread->run: currentThread= " + Thread.currentThread().getId());
            db.collection("PointsAndRating")
                    .orderBy("gmq", Query.Direction.DESCENDING)
                    .get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        Log.d(TAG, "ExampleThread->run: currentThread= " + Thread.currentThread().getId());
                        Log.d(TAG, document.getId() + "=accumulatedUpdatedNugget=@@ => " + document.getData());
                    } // end of for loop
                }
            });
        }
    } // end of ExampleThread

不幸的是,行返回 1。Log.d(TAG, "ExampleThread->run: currentThread= " + Thread.currentThread().getId());

Android 多线程 Firebase Google-Cloud-Firestore

评论


答:

2赞 Frank van Puffelen 6/28/2020 #1

Firestore SDK 在单独的线程中处理其所有网络和磁盘交互。但是,对代码的所有回调都是在主线程上进行的,因此您可以从它们与 UI 进行交互。