在Android studio環境下使用EventBus


EventBus是一個訂閱/發布消息總線,實現在應用程序里面,組件之間,線程之間的通信。因為event是任意的類型,所以這個使用起來非常方便。

 

eventbus中的角色:

event:當然就是事件啦

subscriber:事件的訂閱者,先注冊,接收特定的對象,並通過onEventXXX()來回收處理事件。

Publisher:事件的發布者,通過post發布信息。

 

處理過程主要分為5步:

1.定義一個事件(event)

2.注冊一個訂閱者

3.發布一個事件

4.接收處理一個事件

5.注銷一個訂閱者

四種處理事件的方式onEventXXXX

onEvent函數一共有四種,前面的例子只用到一個onEvent。

函數名 含義 ThreadMode
onEvent 事件處理在事件發送的那個線程執行 PostThread
onEventMainThread 事件在主線程-UI線程執行 MainThread
onEventBackgroundThread 事件在一個后台線程執行(就一個后台線程) BackgroundThread
onEventAsync 事件會單獨啟動一個線程執行(每個事件都會啟動一個線程) Async

其中前三個事件處理方式,都應該盡快完成。

 

在as下的代碼示例

改module下的在build.gradle 文件里面,dependencies目錄下添加這一句話

compile 'de.greenrobot:eventbus:2.4.0'

在連網的情況下,build工程,as會自動去網上下載相應的jar包。build結束后就可以編程了。

1.定義event。在FirstEvent.java中的代碼如下

 1 public class FirstEvent {
 2 
 3     private String msg;
 4     public FirstEvent(String str){
 5         msg = str;
 6     }
 7 
 8     public String getMsg(){
 9         return msg;
10     }
11 }

2.注冊一個訂閱者,在MainActivity.java 中的onCreate()方法中加入如下代碼

1 EventBus.getDefault().register(this);

3.發布一個事件。在SecondActivity中發布一個事件,當點擊button后發布事件,代碼如下

 1   protected void onCreate(Bundle savedInstanceState) {
 2         super.onCreate(savedInstanceState);
 3         setContentView(R.layout.activity_second);
 4 
 5         btn = (Button)findViewById(R.id.second_btn);
 6         btn.setOnClickListener(new View.OnClickListener() {
 7             @Override
 8             public void onClick(View v) {
 9                 
10                 //發布一個事件
11                 EventBus.getDefault().post(new FirstEvent("this is an event. "));
12             }
13         });

4.接收並處理一個事件,在MainActivity中處理改事件,添加如下代碼。

1  public void onEventMainThrend(FirstEvent event){
2         String str = "this is in main activity , "+event.getMsg();
3 
4         Log.d("yuqt",str);
5         tv.setText(str);
6         Toast.makeText(this,str,Toast.LENGTH_LONG).show();
7     }

5.注銷事件,在onDestroy()中進行注銷。

1    protected void onDestroy() {
2         super.onDestroy();
3         EventBus.getDefault().unregister(this);
4     }

完成。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM