Crashlytics.logException 方法抛出非法状态异常。无法收集某些活动的非致命问题
Posted
技术标签:
【中文标题】Crashlytics.logException 方法抛出非法状态异常。无法收集某些活动的非致命问题【英文标题】:Crashlytics.logException method throwing illegal state exception. Not able to collect non-fatal issues for some activities 【发布时间】:2019-04-09 17:14:24 【问题描述】:我的应用使用了上述 Firebase Crashlytics 功能,但我遇到了一个奇怪的问题。最近我在我的应用程序的 Playstore 崩溃中看到了一个异常(见附图)。 该位置对应的代码如下:
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my_sites)
setSupportActionBar(findViewById(R.id.my_toolbar))
init()
try
loadSitesSetAdapter()
catch (e:NullPointerException)
Crashlytics.logException(e) // this is line 55 as crash
finish()
// startActivity(Intent(this,MainActivity::class.java))
我的应用中的 Fabric 初始化如下:
在应用程序级别的 gradle 中我有:
buildTypes
release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
debug
// Disable fabric build ID generation for debug builds
ext.enableCrashlytics = false
在主要活动中,我有以下内容:
val crashlyticsKit = Crashlytics.Builder()
.core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
.build();
// Initialize Fabric with the debug-disabled crashlytics.
Fabric.with(this,crashlyticsKit)
最后但并非最不重要的一点是我在 gradle 文件中的依赖关系如下:
// Crashlytics
implementation('com.crashlytics.sdk.android:crashlytics:2.9.8@aar')
transitive = true;
我在这里有什么明显的遗漏吗?请帮忙
【问题讨论】:
【参考方案1】:Fabric 必须先初始化,然后才能在应用中使用。您在哪里调用Crashlytics.logException(e)
,是在Fabric.with(this,crashlyticsKit)
行之前完成的吗?如果没有,则必须先初始化 Fabric,然后才能使用它的任何方法。
如果您要在多个活动/屏幕中调用 Fabric 方法,那么最好有一个可以初始化 Fabric 的 Application 子类。
请参阅此处的入门段落: https://docs.fabric.io/android/fabric/overview.html#manual-setup
【讨论】:
谢谢。我只在主要活动中这样做。我不知道每项活动都需要这样做。 是的,如果你想在多个活动中使用它,只需创建一个 Application 子类并在该类的 onCreate 方法中初始化它。 这是令人困惑的地方:我正在查看此页面:firebase.google.com/docs/crashlytics/… 在第 2 点上显示“在您的任何一项活动中” 如果您只希望它用于一项活动,那很好。但是对于多个屏幕,您应该将其放在 Application 子类中。如果没有,那么您只需为每个要使用它的 Activity 将它放在 onCreate 中。以上是关于Crashlytics.logException 方法抛出非法状态异常。无法收集某些活动的非致命问题的主要内容,如果未能解决你的问题,请参考以下文章