EventBus3.0使用(二)
1931 ワード
上一篇EventBus 3.0使用(一)
Sticky Events粘性イベント
Sticky Eventsは、イベントのパブリッシュ、サブスクリプションの再登録、サブスクリプションが処理する特殊なタイプのイベントを許可します.Androidには、Sticky Broadcast、すなわち粘性放送という例がある.通常、送信者がある放送を送信し、受信者がこの放送を送信してから自分のReceiverに登録すると、受信者は先ほどの放送を受信できなくなります.このためAndroidはStickyBroadcastを導入し、放送送信終了後に送信したばかりの放送(Intent)を保存します.これにより、受信者がReceiverに登録した後、さっき発表したブロードキャストを受信することができる.これにより、消費者がいるときに消費者に渡すように、いくつかの事件を事前に処理することができます.
よくある例です
Activity AがActivity BにジャンプしたときにユーザUserを渡すのは、一般的な方法では、まずUserがシーケンス化インタフェースを実現しなければならない.その後、UserはIntentに入れる必要があり、Activity BではIntentからUserを解析する必要がある.今EventBusのSticky Eventsを使って実現します.以下は偽コードです.
Userクラス
ActivityA
ActivityB
スティッキーイベントの取得と手動削除
次はEventBus 3.0使用(3)
Sticky Events粘性イベント
Sticky Eventsは、イベントのパブリッシュ、サブスクリプションの再登録、サブスクリプションが処理する特殊なタイプのイベントを許可します.Androidには、Sticky Broadcast、すなわち粘性放送という例がある.通常、送信者がある放送を送信し、受信者がこの放送を送信してから自分のReceiverに登録すると、受信者は先ほどの放送を受信できなくなります.このためAndroidはStickyBroadcastを導入し、放送送信終了後に送信したばかりの放送(Intent)を保存します.これにより、受信者がReceiverに登録した後、さっき発表したブロードキャストを受信することができる.これにより、消費者がいるときに消費者に渡すように、いくつかの事件を事前に処理することができます.
よくある例です
Activity AがActivity BにジャンプしたときにユーザUserを渡すのは、一般的な方法では、まずUserがシーケンス化インタフェースを実現しなければならない.その後、UserはIntentに入れる必要があり、Activity BではIntentからUserを解析する必要がある.今EventBusのSticky Eventsを使って実現します.以下は偽コードです.
Userクラス
public class User {
String name ;
String phoneNum;
//
public User(String aName) {
name = aName ;
}
//
}
ActivityA
public class ActivityA extends Activity {
//
@Override public void onClick(View v) {
User aUser = new User("Mr.Simple");
aUser.phoneNum = "123456"; //
// Sticky
EventBus.getDefault().postSticky(aUser);
// ActivityB
Intent intent = new Intent(this, ActivityB.class);
startActivity(intent);
}
}
ActivityB
public class ActivityB extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Sticky
EventBus.getDefault().registerSticky(this);
}
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
private void receiveUser(User info){
// , info User
}
}
スティッキーイベントの取得と手動削除
MessageEvent stickyEvent = EventBus.getDefault().getStickyEvent(MessageEvent.class);
// Better check that an event was actually posted before
if(stickyEvent != null) {
// "Consume" the sticky event
EventBus.getDefault().removeStickyEvent(stickyEvent);
// Now do something with it
}
次はEventBus 3.0使用(3)