【发布时间】:2017-12-19 08:50:43
【问题描述】:
在 Android 代码中,我们经常使用这种模式,将数据存储在 Application 对象中,然后通过强制转换访问它:
((MyApplicationObject)getApplication()).getDaggerComponent()
getApplication() 应始终为MyApplicationObject,因为我已在AndroidManifest.xml 中指定它。但是,当您部署此代码时,有时它会导致 ClassCastException,而我们会得到一个不同的对象。
这怎么可能?
解决此问题的正确方法是什么?
【问题讨论】:
-
导致类转换异常?错误信息是什么。它应该说类似“XX 不能转换为 MyApplicationObject”。你的XX是什么?
-
我不知道 XX 是什么,因为我只能在 Google Play Console 中找到这个错误,它没有提供该信息
-
嗯,这很奇怪,它不应该是与您定义的应用程序不同的应用程序。无论如何,解决方法是在投射前检查
instanceof -
您是否在特定版本的 Android SDK(例如 API 24-25)中看到了这一点? There's a known issue about trying to cast the Application.
-
感谢您提供该链接! 98% 的崩溃来自 Android 7.0,0.2% 来自 Android 7.1。在链接中,@google 工程师说他们改进了 7.0 中的主要问题,但没有完全修复。