【发布时间】:2013-10-31 11:54:48
【问题描述】:
我正在为我们的应用添加 Android Beam 支持。但是因为我们仍然支持 2.2 * coughcough die froyo, diegingerbread,cough * 我已经在 NfcHandler 类中使用 TargetApi 注释打包了所有 NFC 代码,以避免像这样的 lint 警告:
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public class NfcHandler implements NfcAdapter.CreateNdefMessageCallback
然后在onCreate 期间从MainActivity 构建对象,如有必要,如下所示:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
nfcHandler = new NfcHandler(this);
在构造函数中,它完成所有必要的 NFC 工作,然后在代码 if( nfcHandler != null ) 中,我将意图传递给它,因此它可以检查它是否正在接收光束。
一切都很好,而且大部分时间都有效。 但在极少数情况下,Gingerbread 设备会崩溃:
10-22 16:08:01.022 1734-1734/com.baseapp.eyeem.p0 E/dalvikvm﹕找不到类 'com.baseapp.eyeem.os.NfcHandler',引用自方法 com.foo.MainActivity .onCreate
我的意思是,这个类确实存在,它只是它的一个空对象。
因为我们在 XXHDPI 设备上的应用程序是 23mb 而在 ldpi Gingerbread 上是 5mb,我可以看到即时编译器 (JIT) 或其他一些运行时优化正在删除不必要的资源。我想知道它是否可能与我的 NfcHandler 类的情况相同,因为它为 ICE_CREAM_SANDWICH 注释它会删除它。
所以问题是:
- 到底发生了什么?为什么我只是偶尔而不是每次都发生这种崩溃?
【问题讨论】:
标签: android annotations jit android-annotations