Androidでよく使われるコンポーネント間通信方式
3735 ワード
1.startActivityForResult
2つのActivity間の1対1のインタラクションに適用されます.
2.LocalBroadcastManager
使用条件:ContextがあればOK.利点:送信側のContextはUIコンポーネントでなくてもよく、EventBusはできません.適用シーンは、バックグラウンドでサービス側のプッシュメッセージを受信した後、複数の関連ページがページをリフレッシュしたり、未読の赤い点を表示したりすることです.
使用方法:
2.1送信者:
2.2受信者:
通常のブロードキャスト受信方式と同様に、ページ作成時にリスニング、ページ破棄時にリスニングの登録をキャンセルする必要があります.
ページ間の情報伝達と同期に適しています.適用レベルはActivity、Fragmentです.まず、Intentと同様にEventActionなどの転送用のデータ型を定義します.
ただし、EventTypeはintタイプのInterfaceであってもよいし、enumタイプであってもよい.IntentのActionに似ています.
3.1送信者:
3.2受信者:
各受信者は、登録インタフェースを呼び出して購読する必要があります.
次に、必要に応じて以下の4つの方法のいずれか1つまたは複数を実装し、一般的にはメッセージを受信した後にページをリフレッシュするために使用されるので、一般的な使用方法はonEventMainhread方法のみを実装することである.
EventBusに似ています.RxJavaの付属機能です.プロジェクトにRxJavaパッケージが導入されている場合は、RxBusを使用すると最適です.
5.otto
OTTOはSquareが発売したライブラリで、原理はEventBusと同じで、実現方式も非常に似ています.異なるのは、受信者のコールバック方法が固定された4つではなく、@Subscribe注釈フラグによって受信者のコールバック方法を識別することである.
2つのActivity間の1対1のインタラクションに適用されます.
2.LocalBroadcastManager
使用条件:ContextがあればOK.利点:送信側のContextはUIコンポーネントでなくてもよく、EventBusはできません.適用シーンは、バックグラウンドでサービス側のプッシュメッセージを受信した後、複数の関連ページがページをリフレッシュしたり、未読の赤い点を表示したりすることです.
使用方法:
2.1送信者:
Intent intent = new Intent(ACTION_XXX);
intent.putExtra(KEY_XXX, DATA_XXX);
LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
2.2受信者:
通常のブロードキャスト受信方式と同様に、ページ作成時にリスニング、ページ破棄時にリスニングの登録をキャンセルする必要があります.
private void registerLocalBroadcast() {
mLocalReceiver = new MyLocalBroadcastReceiver();
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mLocalReceiver, new IntentFilter(ACTION_XXX));
}
private void unregisterLocalBroadcast() {
if (mLocalReceiver != null) {
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mLocalReceiver);
}
}
public class MyLocalBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() == ACTION_XXX) {
//todo:
}
}
}
3.EventBus ページ間の情報伝達と同期に適しています.適用レベルはActivity、Fragmentです.まず、Intentと同様にEventActionなどの転送用のデータ型を定義します.
public class EventAction {
public EventType type;
public Object data;
public EventAction(EventType type) {
this.type = type;
}
public EventAction(EventType type, Object data) {
this.type = type;
this.data = data;
}
public EventType getType() {
return type;
}
public Object getData() {
return data;
}
}
ただし、EventTypeはintタイプのInterfaceであってもよいし、enumタイプであってもよい.IntentのActionに似ています.
3.1送信者:
EventAction action = new EventAction(EventType.EVENT_XXX, pushBean);
EventBus.getDefault().post(action);
3.2受信者:
各受信者は、登録インタフェースを呼び出して購読する必要があります.
try {
EventBus.getDefault().register(this);
} catch (Exception e) {
e.printStackTrace();
}
次に、必要に応じて以下の4つの方法のいずれか1つまたは複数を実装し、一般的にはメッセージを受信した後にページをリフレッシュするために使用されるので、一般的な使用方法はonEventMainhread方法のみを実装することである.
/**
*
* onEventMainThread , ,
* onEventMainThread UI , UI , Android ,
* Android UI UI, onEvnetMainThread 。
* @param action
*/
public void onEventMainhread(EventAction action)
{
switch (action.getType()) {
case EVENT_BASE:
break;
default:
break;
}
}
/**
*
* onEvent , ,
* onEvent , 。
* , onEvent , 。
* @param action
*/
public void onEvent(EventAction action)
{
}
/**
*
* onEventBackgrond , UI ,
* onEventBackground , ,
* onEventBackground 。
* @param action
*/
public void onEventBackgroundThread(EventAction action)
{
}
/**
*
* , , onEventAsync.
* @param action
*/
public void onEventAsync(EventAction action)
{
}
4.RxBus EventBusに似ています.RxJavaの付属機能です.プロジェクトにRxJavaパッケージが導入されている場合は、RxBusを使用すると最適です.
5.otto
OTTOはSquareが発売したライブラリで、原理はEventBusと同じで、実現方式も非常に似ています.異なるのは、受信者のコールバック方法が固定された4つではなく、@Subscribe注釈フラグによって受信者のコールバック方法を識別することである.