標籤:
最近再看eventbus相關代碼,首先從使用開始,後期再從源碼角度分析eventbus.使用Demo後期公布到github上去。使用的架構地址:https://github.com/bboyfeiyu/AndroidEventBus
Sticky 事件 使用例子:
1,首先每個Activity或者fragement都要進行eventBus的註冊和反註冊。發送sticky事件的activity:
1 package com.example.mysimpleeventbus; 2 import org.simple.eventbus.EventBus; 3 import android.content.Intent; 4 import android.os.Bundle; 5 import android.support.v7.app.ActionBarActivity; 6 import android.view.View; 7 import android.view.View.OnClickListener; 8 import android.widget.Button; 9 public class MainActivity extends ActionBarActivity {10 11 private Button button;12 @Override13 protected void onCreate(Bundle savedInstanceState) {14 super.onCreate(savedInstanceState);15 setContentView(R.layout.activity_main);16 button = (Button)findViewById(R.id.button);17 // 1 首先註冊事件匯流排18 EventBus.getDefault().register(this);19 button.setOnClickListener(new OnClickListener() {20 21 @Override22 public void onClick(View arg0) {23 // 2 發送Sticky事件24 EventBus.getDefault().postSticky(25 new User("soyoungboy", "西安財經學院"));26 27 // 跳轉頁面28 Intent intent = new Intent(MainActivity.this, OtherActivity.class);29 startActivity(intent);30 }31 });32 }33 @Override34 protected void onDestroy() {35 super.onDestroy();36 EventBus.getDefault().unregister(this);37 }38 }
接收事件的類:注意這裡的註冊不是register就行了,而是:
EventBus.getDefault().registerSticky(this);
1 package com.example.mysimpleeventbus; 2 import org.simple.eventbus.EventBus; 3 import org.simple.eventbus.Subscriber; 4 import android.app.Activity; 5 import android.os.Bundle; 6 import android.widget.Toast; 7 public class OtherActivity extends Activity { 8 @Override 9 protected void onCreate(Bundle savedInstanceState) {10 // TODO Auto-generated method stub11 super.onCreate(savedInstanceState);12 setContentView(R.layout.activity_main);13 //注意此處的registerSticky而不是register14 EventBus.getDefault().registerSticky(this);15 }16 //此處擷取發送事件的內容17 @Subscriber18 void showToast(User user) {19 Toast.makeText(OtherActivity.this, user.toString(), Toast.LENGTH_LONG).show();20 }21 @Override22 protected void onDestroy() {23 super.onDestroy();24 //同樣需要unregister25 EventBus.getDefault().unregister(this);26 }27 }
然後設定檔:
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.mysimpleeventbus" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 <uses-sdk 7 android:minSdkVersion="8" 8 android:targetSdkVersion="20" /> 9 <application10 android:allowBackup="true"11 android:icon="@drawable/ic_launcher"12 android:label="@string/app_name"13 android:theme="@style/AppTheme" >14 <activity15 android:name=".MainActivity"16 android:label="@string/app_name" >17 <intent-filter>18 <action android:name="android.intent.action.MAIN" />19 <category android:name="android.intent.category.LAUNCHER" />20 </intent-filter>21 </activity>22 <activity android:name=".OtherActivity" >23 </activity>24 </application>25 </manifest>
如果MainActivity發送事件匯流排時,設定Tag的話,OtherActivity@Subscriber 註解沒有添加tag的話,就不會擷取到資料,除非設定tag設定tag代碼如下:
1 EventBus.getDefault().postSticky( 2 new User("soyoungboy", "西安財經學院"),"soyoungboy");
則對應的OtherActivity中接收的改為:
//此處擷取發送事件的內容
1 //此處擷取發送事件的內容2 @Subscriber(tag = "soyoungboy")3 void showToast(User user) {4 Toast.makeText(OtherActivity.this, user.toString(), Toast.LENGTH_LONG).show();5 }
架構對應Demo中有這樣一句話:不同組件 (Activity、Fragment、Service等)、不同線程之間都可以通過事件匯流排來發布事件,它是安全執行緒的。 * 只要發布的事件的參數類型和tag都匹配即可接收到事件.
【第一篇】學習 android 事件匯流排androidEventbus之sticky事件的傳遞