ClassCastException:应用程序对象不是我的自定义应用程序对象

gre*_*egm 1 android dagger dagger-2

通常在 Android 代码中,我们使用这种模式将数据存储在 Application 对象中,然后通过转换访问它,如下所示:

((MyApplicationObject)getApplication()).getDaggerComponent()
Run Code Online (Sandbox Code Playgroud)

getApplication()应该总是MyApplicationObject因为我已经在AndroidManifest.xml. 但是,当您部署此代码时,有时它会导致 aClassCastException而我们得到一个不同的对象。

怎么会这样?

此问题的正确解决方法是什么?

Jef*_*ica 5

已在评论中解决:这是一个 Android 错误,与 Dagger 无关。

谢谢你的链接!98% 的崩溃来自 Android 7.0,0.2% 来自 Android 7.1。在链接中,@google 工程师说他们改进了 7.0 中的主要问题,但没有完全修复它。–格雷姆

请参阅此公开的 Google IssueTracker 链接,#37137009:java.lang.ClassCastException:无法将 android.app.Application 转换为 com.xxx.xxApplication(ctate 在#17 中的评论):

是的,这是一个已知问题;并且在 7.1 中得到了很大程度的解决。7.1 中仍有一些边缘情况会导致类似的情况——正如您从分析中看到的那样——但机会窗口要窄得多,而 Android 8 也解决了这些问题。

不幸的是,目前似乎没有太多解释或官方解决方法,但至少该问题主要限于 Android 7.0。