通常在Android代码中,我们使用这种在Application对象中存储数据的模式,然后通过强制转换来访问它:
((MyApplicationObject)getApplication()).getDaggerComponent()
getApplication()
应该始终为MyApplicationObject
,因为我已在AndroidManifest.xml
中指定了它。但是,当您部署此代码时,有时它会导致ClassCastException
,而我们会得到一个不同的对象。
这怎么可能?
此问题的正确解决方法是什么?
答案 0 :(得分:3)
评论中已解决:这是一个Android错误,而不是与Dagger相关的错误。
感谢您的链接! 98%的崩溃来自Android 7.0,其中0.2%来自Android 7.1。在链接中,一位@google工程师表示他们在7.0中的主要问题上做了改进,但没有完全修复它。 - gregm
请参阅此公开Google IssueTracker链接,#37137009: java.lang.ClassCastException: Cannot cast android.app.Application to com.xxx.xxApplication(ctate在#17中的评论):
是的,这是一个已知问题;并在7.1中得到了解决。 7.1中仍然存在一些可能导致类似情况的边缘情况 - 正如您从分析中看到的那样 - 但机会窗口要窄得多,而Android 8也解决了这些问题。
不幸的是,暂时似乎没有太多解释或官方解决方法,但至少问题主要限于Android 7.0的范围。