Java 使用Executor删除firebase中的集合

Java 使用Executor删除firebase中的集合,java,android,google-cloud-firestore,Java,Android,Google Cloud Firestore,我创建了一个包含聊天功能的应用程序,并使用firestore collection存储其中的所有消息 我给了用户一个选项来删除他们的帐户,这意味着删除该集合 我发现没有直接删除集合的方法,基本上我需要做的是遍历所有文档并删除它们 我看到有一些解决方案,建议使用执行器执行删除 private void deleteCollection(final CollectionReference collection, Executor executor) { Tasks.call(executor

我创建了一个包含聊天功能的应用程序,并使用firestore collection存储其中的所有消息

我给了用户一个选项来删除他们的帐户,这意味着删除该集合

我发现没有直接删除集合的方法,基本上我需要做的是遍历所有文档并删除它们

我看到有一些解决方案,建议使用执行器执行删除

private void deleteCollection(final CollectionReference collection, Executor executor) {
    Tasks.call(executor, () -> {
        int batchSize = 10;
        Query query = collection.orderBy(FieldPath.documentId()).limit(batchSize);
        List<DocumentSnapshot> deleted = deleteQueryBatch(query);

        while (deleted.size() >= batchSize) {
            DocumentSnapshot last = deleted.get(deleted.size() - 1);
            query = collection.orderBy(FieldPath.documentId()).startAfter(last.getId()).limit(batchSize);

            deleted = deleteQueryBatch(query);
        }

        return null;
    });
}
我还尝试使用执行人,如下所示:

executor = new Executor() {
    @Override
    public void execute(Runnable command) {
        executor.execute( command );
    }
};
但我有一个错误说:

java.lang.StackOverflowError: stack size 8MB
所以我不知道怎么称呼它

另外,使用此解决方案与仅使用for循环和删除每个文档而不使用executor有什么区别吗


谢谢

需要执行者是因为操作可能(可能)需要很长时间才能完成,并可能导致ANR(应用程序没有响应),因此需要从主线程运行。这是一种很好的做法,强烈建议在接近强制的边缘时,在单独的线程中执行任何类型的网络/IO/数据库操作,以避免锁定主线程,因此需要执行器。感谢您的解释。现在我只需要了解如何实际使用这个执行器=]我发现了这个和一些可能会帮助你更好地理解的东西
java.lang.StackOverflowError: stack size 8MB