2015年3月1日日曜日

BroadcastReceiverの遅延及びServiceとの関係

BroadcastReceiverの遅延及びServiceとの関係 2題

BroadcastReceiverの遅延
BroadcastReceiverではonReceive()で情報を受け取ることになります。
EclipseでCleanコマンドを実行した後で、デバッグによるアプリの実行を行うと、アプリの稼働後(onCreate()が呼ばれた後)に(アプリを更新したことを原因として)BroadcastReceiverのonReceive()が実行されてしまう場合があります。
止むを得ないため、アプリにおいて、こういう状況ではアプリを終了させるようにコーディングを行いました。
つまり、アプリを再起動させなければならないということです。

Serviceの終了行程時におけるBroadcastReceiverによる呼び出し
Serviceが役目を果たし終えたので、Service内においてstopSelf()を実行させたところ、onDestroy()が呼ばれる前に、BroadcastReceiverのonReceive()が呼ばれ、ServiceのonStartCommand()が呼ばれました。
既にstopSelf()が実行された後なので、BroadcastReceiverに基ずく仕事は何もできませんでした。
このようなタイミングはほとんど発生はしないです。人工的に作ろうとしても難しいでしょう。
しかしながら、発生してしまった以上、見逃すことはできないため、アプリの設計を見直しました。
stopSelf()を実行したのであれば、それ以降は、Serviceはメッセージを受け取らないという仕様にして欲しかったです。

開発環境:Windows & Eclipse
Android 4.4W.2(API20)

0 件のコメント:

コメントを投稿