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