時々、アクティビティの終了と同時に、処理を実装したいケースがあります。
外的なイベントであれば、バックキー押下がそれに当たります。
こういった場合、Activity#onKeyDownなんかで、キーコードをフックして何か処理を実施するものだと思っていましたが、コレがNGってことがわかりました。
何がNGっかというと、Activity#onKeyDownやActivity#onKeyUpでは、アクティビティの終了にならないケースがあるからです。
具体的には、以下のような流れになります。
1.バックキー押下したままにする
2.Aアクティビティで、画面遷移するボタンを押下
3.Bアクティビティが表示される
4.バックキー放す
5.Bアクティビティはfinishしないけど、keyUpは発生する
バックキーと同期して処理を行いたい場合は、Activity#onBackPressedをオーバライドするとよさそうです。
Activity#onBackPressedは2.0以降を境に、処理タイミングが異なりますので、やや注意が必要です。
2.0以前:onKeyDownで処理
2.0以降:onKeyUpで処理。ただしonKeyDown→onKeyUpじゃないと呼び出されない
あ、ちなみに、Activity#onKeyDownでfinishと同時に、DB更新。みたいな事をやると、これ相当ヤバイ。Activity#onKeyDownは、キーを長押しすると、連続で発生するイベントだからです。
Activity#onBackPressedで、アクティビティ終了と判定した場合、Activity#isFinishingがtrueになる。コレを使うとフラグメントも含め処理がうまくいきそう!
0 件のコメント:
コメントを投稿