Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中開源庫EventBus使用詳解

Android中開源庫EventBus使用詳解

編輯:關於Android編程

當Android項目越來越龐大的時候,應用的各個部件之間的通信變得越來越復雜,例如:當某一條件發生時,應用中有幾個部件對這個消息感興趣,那麼我們通常采用的就是觀察者模式,使用觀察者模式有一個弊病就是部件之間的耦合度太高,在這裡我將會詳細介紹Android中的解耦組建EventBus的使用。

 

 

 

一、使用EventBus的步驟:

 

1、下載EventBus

2、讓自己的項目以來EventBus

3、自定義一個事件(不需要繼承任何類),通常我比較喜歡定義一個Message類

4、定義回調函數,相當於觀察者模式中的on***Listener函數,在EventBus中可以定義四種類型的回調函數:

a、onEvent 它和ThreadModel中的PostThread對應,這個也是默認的類型,當使用這種類型時,回調函數和發起事件的函數會在同一個線程中執行

b、onEventMainThread,當使用這種類型時,回調函數會在主線程中執行,這個在Android中非常有用,因為在Android中禁止在子線程中修改UI

c、onEventBackgroundThread,當使用這種類型時,如果事件發起函數在主線程中執行,那麼回調函數另啟動一個子線程,如果事件發起函數在子線程執行,那麼 回調函數就在這個子線程執行。

d、onEventBusAsync,當使用這種類型時,不管事件發起函數在哪裡執行,都會另起一個線程去執行回調。

 

 

public class MainActivity extends Activity {
	private ImageView img1;
	private ImageView img2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
//		img1=(ImageView)this.findViewById(R.id.img1);
//		img2=(ImageView)this.findViewById(R.id.img2);
		Log.v(EventBus1, Thread.currentThread().getId()++++);
		
		//注冊
		EventBus.getDefault().register(this);
		EventBus.getDefault().register(new MyClass());
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	
	//分發
	public void postEvent(View view)
	{
		
					
					EventBus.getDefault().post(new ChangeImgEvent(1));
				
	}
	
	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		EventBus.getDefault().unregister(this);
	}
	
	public void onEventAsync(ChangeImgEvent event)
	{
		Log.v(EventBus1, Thread.currentThread().getId()+----);
		if(event.getType()==1)
		{
			System.out.println(-------------+++++++++++);
			try {
				Thread.sleep(10000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}
	
	

}

具體使用如上,代碼比較簡單,就不做介紹了,我已經上傳詳細代碼

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved