A と B の 2 つのアクティビティがあります。A は常に B と B がダイアログ テーマを使用する前に開始します (これは必須かつ重要です)。どちらも NFC フォアグラウンド ディスパッチ メカニズムを使用しており、これは非常にうまく機能します。ただし、方向が変わると問題が発生します。必要に応じて、onResume メソッドと onPause メソッドでフォアグラウンド ディスパッチを有効または無効にします。
何が起こるのですか:
- A が起動し、A onResume が呼び出されます
- A onPause、B launches、B onResume が呼び出されます (すべてが期待どおりに動作します)。
- 方向転換
- B onPause が呼び出され、B が再度起動され、B onResume が呼び出され、A がバックグラウンドで再度起動され、A onResume が呼び出され、A onPause が呼び出されます
--> これで、B のフォアグラウンド ディスパッチが機能しなくなりました。
すべてが通常のテーマでうまく機能するため、B のダイアログ テーマがこの問題を引き起こしています。回避策はありますか?
解決:
コメントありがとうございますが、役立つ回避策を見つけました。アクティビティ BI の onCreate メソッドで、次の操作を行います。
/*
* This workaround is needed as this activity uses the dialog theme. When the background activity uses the foreground
* dispatch as well, then it breaks this activity's foreground dispatch on an orientation change.
*/
mCancelButton.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
NfcForegroundDispatch.setupForegroundDispatch(NfcDetectorActivity.this);
}
});
私が言ったように、それは解決策ではなく回避策です。