LocalBroadcastManager
LocalBroadcastManagerはアプリ内の同プロセスに限定して、Broadcastを行う事ができます。通常のsendBroadcastでブロードキャストと異なり、次のような利点があります。
プライベートなデータをアプリ外に残す心配がない。
他アプリがこのBroadcastを使う事ができない。(セキュリティホールの心配はしなくていい)
通常のBroadcastに比べ、より効率的アプリ内部へブロードキャストが行える。
注意点としては「同プロセス」に限定してブロードキャストを行います。言い換えれば、他プロセスにはブロードキャストは行えません。
用途
データ管理を行うModleクラスを作成する際、多くの人はServiceで実装すると思います。Serviceを使うまでもない軽微なModleなら、ObserverとしてLocalBroadcastManagerを利用してデータの更新通知を行うのもありかと思います。
サンプルソース
こちらにJUnit付きのソースをアップしています。https://github.com/baroqueworksdev/MyApiDemo_AndroidStudio/commit/cf08208cfd84b916480a08acf6f43fd791ca7da0
public class LocalBroadcastController {
private LocalBroadcastManager mLocalBroadcastManager;
private IntentFilter mIntentFilter;
private OnLocalBroadcastController mOnLocalBroadcastController;
public interface OnLocalBroadcastController {
public void onReceive(Context context, Intent intent);
}
/**
* Constructor
*
* @param context Context
* @param filter Intent Filter which need to receive an action
* @param listener onReceive
*/
public LocalBroadcastController(Context context, IntentFilter filter, OnLocalBroadcastController listener) {
mLocalBroadcastManager = LocalBroadcastManager.getInstance(context);
mIntentFilter = filter;
mOnLocalBroadcastController = listener;
}
/**
* Register Receiver
*/
public void registerReceiver() {
mLocalBroadcastManager.registerReceiver(mReceiver, mIntentFilter);
}
/**
* Unregister Receiver
*/
public void unregisterReceiver() {
mLocalBroadcastManager.unregisterReceiver(mReceiver);
}
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
mOnLocalBroadcastController.onReceive(context, intent);
}
};
}
0 件のコメント:
コメントを投稿