mawasiの備忘録

忘れやすい自分の為のプログラムやその他諸々に関するメモ

BroadcastReceiverの実装について

BroadcastReceiverの実装には2種類の方法があります。

その2種類のxamarinでの実装方法、動作の違いを調査したのでメモしておきます。

1, BroadcastReceiverを継承したクラスにAttributeを設定するパターン

java とかなら manifest に記述するパターンです。

クラスを明示的にインスタンス化する必要はありません。

アプリがOSなどから終了させられない限り、指定のIntentを受け取って処理できます。

アプリは起動中のアプリ一覧から消すだけでは厳密には終了してないので

自発的に完全に終了させる場合は、設定のアプリ一覧から強制終了する必要があるみたいです。

実装サンプル

2, BroadcastReceiverを継承したクラスにAttributeは設定せず、

Activityなどからインスタンス化したものをレシーバーとして登録するパターン

レシーバーとして登録したActivityが有効な状態のときのみIntentを受け取れます。

Activityが有効な場合はアプリがバックグラウンドで動作中でもIntentを受け取れます。

ただし、パターン1と違って、アプリが動作していても、動作中アプリ一覧に並んでない場合は

このパターンのレシーバーは動作していません。

実装サンプル

まとめ

どちらのパターンをどういう風に使い分けるのがいいのかはあまり良くわかりませんが、

自分が作ったアプリでは、アプリが開いているときしかIntentを受け取る必要もなかったので

パターン2の方で実装しました。

パターン1のほうはandroidからアプリを終了したつもりでも明確には終わってないので、

そのあたりは注意が必要そうです。