私たちのアプリに Android Beam のサポートを含めています。しかし、まだ 2.2 をサポートしているため *咳、咳、死ぬ、ジンジャーブレッド、咳* クラス内のすべての NFC コードをNfcHandler
TargetApi アノテーションでパックして、次のようなリント警告を回避しました。
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public class NfcHandler implements NfcAdapter.CreateNdefMessageCallback
次に、必要に応じてMainActivity
次onCreate
のようにオブジェクトを構築します。
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.foo.MainActivity.onCreate から参照されるクラス 'com.baseapp.eyeem.os.NfcHandler' が見つかりませんでした
つまり、クラスは存在し、それはただの null オブジェクトです。
XXHDPI デバイスのアプリは 23 MB で、ldpi Gingerbread は 5 MB であるため、ジャスト イン タイム コンパイラ (JIT) またはその他のランタイム最適化によって不要なリソースが削除されていることがわかります。ICE_CREAM_SANDWICH
それはそれを削除するための注釈であるため、私の NfcHandler クラスと同じケースになるのではないかと思います。
質問は次のとおりです。
- 実際に何が起こっているのか、なぜこのクラッシュが毎回ではなくたまに発生するのですか?