每次调用 Firebase Analytic 的 getInstance() 与将实例存储为 Application 类中的静态变量

Posted

技术标签:

【中文标题】每次调用 Firebase Analytic 的 getInstance() 与将实例存储为 Application 类中的静态变量【英文标题】:Calling Firebase Analytic's getInstance() every time vs. storing instance as a static variable in Application class 【发布时间】:2017-02-10 08:12:09 【问题描述】:

我正在尝试确定以下哪一项是正确的方法:

    从我记录事件的每个活动、片段和服务中调用 FirebaseAnalytics.getInstance(Context)

    Application 类调用一次FirebaseAnalytics.getInstance(Context) 并将其作为公共静态变量保留。然后,我可以从任何我需要的地方调用“MyAppClass.mFirebaseAnalytics.logEvent()”。

上述任何方法是否会对自动收集的事件产生不良影响和/或其中任何一种方法是否会比另一种方法提高效率?

非常感谢!

【问题讨论】:

选择一个正确的答案。 @fahmy 你有没有机会找出使用 1 和 2 的区别?我正在使用 Firebase V 10.2.0。并查看 Firebase 反编译类中上下文的使用情况,我看到上下文仅用于获取应用程序上下文。对于活动和东西,有方法firebaseAnalytics.setCurrentScreen我们可以命名活动和东西。所以,我现在的猜测是使用应用程序上下文就足够了,但我还没有测试过。 @laaptu 不,除了下面的答案,没有任何新信息。 您需要小心一点,因为MyAppClass.mFirebaseAnalytics 仍然为空时可以访问它 【参考方案1】:

documentation 声明:

公共静态 FirebaseAnalytics getInstance(上下文上下文)

返回单例 FirebaseAnalytics 接口。

所以我看不出有什么特别的原因说明你的代码中不能只包含一个单例实例。 这两种方法都不会带来任何明显的效率提升。如果您正在研究第二个选项,则可能值得考虑使用依赖注入和分析实例周围的简单包装器来执行此操作,以提高代码的可测试性。

【讨论】:

我担心 Firebase 可能会使用上下文来获取有关生命周期或应用程序流的信息。我读过的所有指南都只声明它应该放在活动中。 对 jayeffkay 评论的回应:如果它是一个单例并且您没有传递生命周期所有者,那么在哪里初始化它又有什么关系呢?查看文档我看到已经有一些自动收集的事件support.google.com/firebase/answer/6317485

以上是关于每次调用 Firebase Analytic 的 getInstance() 与将实例存储为 Application 类中的静态变量的主要内容,如果未能解决你的问题,请参考以下文章

Google Analytics UA 和 GA4 以及 firebase 现有项目

如何获得一天中应用程序中用户的登录数量?

FireBase 在第一轮循环后抛出 WebException 400

Analytic Functions in Oracle

在javascript和axios中为来自前端的每个api调用发送firebase身份验证令牌

如何从 Cloud Function 调用其他 Cloud Firebase Functions