Firebase 崩溃报告如何初始化

Posted

技术标签:

【中文标题】Firebase 崩溃报告如何初始化【英文标题】:How does Firebase crash reporting initialize 【发布时间】:2016-10-10 20:14:37 【问题描述】:

我非常好奇应用程序中是如何编写 0 代码的,而所需要的只是使用该库

compile 'com.google.firebase:firebase-crash:9.0.1'

为了让 Firebase 崩溃报告正常工作。 初始化是否总是一次性的,就像应用程序类的 onCreate 总是被调用一次一样?

如果我只想在某个事件之后启用崩溃报告,我该怎么办?

【问题讨论】:

【参考方案1】:

更新:现在有一篇关于how Firebase components initialize 的综合博文。

Firebase 崩溃报告(除了其他 Firebase 组件)在自动包含在您的应用中的 ContentProvider 中进行初始化。 ContentProviders 首先被实例化,然后是你的 Application 子类,然后是被调用的任何组件(Activity、Service、BroadcastReciever)。

当您的项目依赖于 android 库项目(aar 文件)时,其所有清单条目都将合并到您的应用中,因此您只需声明对 firebase-crash 的依赖即可免费获得此 ContentProvider。

我在 2016 年 Google I/O 大会上发表了关于这一切如何运作的演讲。 Jump to 16:22 用于崩溃报告特定内容的开头。

很遗憾,目前无法以编程方式启用或禁用崩溃报告,但即将推出。

【讨论】:

我一定会去看看的!那么提供程序是否也只初始化一次?根据您的评论,我认为是这样 是的,所有 ContentProvider 在主进程开始时只经过一次 onCreate()。 刚刚看了视频,解释的很到位,谢谢!我问的原因是看看是否有一种替代方法可以将应用程序初始化代码放置在 Application sublcas 以外的地方,以减少冷启动时间。我想,在内容提供者中初始化它对减少没有帮助吧? 没错。所有 ContentProvider.onCreate 和 Application.onCreate 都有助于完全启动应用程序进程所需的时间。如果你想启动一个线程来做一些异步的事情,那很好。您只需要确保依赖异步初始化结果的任何其他代码都对它可能尚未完成的事实敏感,这会为您解决全新的问题。 :-) 叹气,我希望像你提到的那样让事情变得更加异步,但是在分析之后,firebase 崩溃初始化在阻塞线程上需要 200 毫秒,这似乎相当昂贵 - nimbledroid.com/my_apps/…【参考方案2】:

所以基本上当我使用 Firebase 崩溃报告时,我不得不在 ContentProvider 中进行初始化。因此,我的应用程序有 2 个进程,如果我在 Application.onCreate 中进行初始化,那么它会被调用两次 - 每个进程一次。但是其他进程并不关心我的初始化代码,所以我不想做两次。所以我可以使用ContentProvider 或检查当前进程名称。 或者我还缺少什么?

【讨论】:

以上是关于Firebase 崩溃报告如何初始化的主要内容,如果未能解决你的问题,请参考以下文章

Firebase crashlytics 未在 iOS 中初始化

由于 Firebase 初始化,App Delegate 崩溃

应用程序在调试时运行时如何禁用 Firebase 崩溃报告?

Firebase 应用配置崩溃

将 AdMob 添加到 Firebase 项目时崩溃

Firebase 崩溃报告上传错误