在Android Firebase数据库事务的后台线程中工作

时间:2016-09-29 11:33:30

标签: android multithreading firebase firebase-realtime-database

据我了解,Firebase实时数据库Transaction.Handler doTransaction方法不在主UI线程中运行(请参阅link)。

在doTransaction中使用这个线程进行一些需要几秒钟才能完成的工作是否可以接受?

public Transaction.Result doTransaction(MutableData mutableData) {
            SomeClass p = mutableData.getValue(SomeClass.class);

            //-- do something here that will take a few seconds
            someLongTask(p);

            mutableData.setValue(p);
            return Transaction.success(mutableData);
}

通过"可接受",我的意思是我的其他Firebase数据库调用的响应能力的唯一影响是什么?

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

您的事务处理程序确实在Firebase Database SDK的运行循环中执行。执行长时间操作将停止所有其他Firebase数据库操作(您不会获得任何事件,写入不会被发送到后端等等),直到您的事务处理程序代码完成并且运行循环可以捕获起来。

这基本上会影响性能,但不会导致任何其他问题。所以在这个意义上,它是可以接受的。"

一般情况下,不建议在事务处理程序中执行长操作。了解事务处理程序在成功之前经常运行多次非常重要。因此,您通常不希望执行任何具有副作用的操作(写入文件或SQL数据库等),因为这些副作用将发生未知次数。

通常情况下,您可以重新编写逻辑,以便在开始事务之前执行耗时的操作,但这取决于用例。