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 件のコメント:
コメントを投稿