Android studio 上 EventBus的初步使用
之前 一直使用eclipse進(jìn)行Android開發(fā),現(xiàn)在到公司實(shí)習(xí),要求使用android studio 進(jìn)行開發(fā),適應(yīng)了幾天慢慢習(xí)慣了android studio,初步感覺確實(shí)比eclipse好用很多。
-------------------------------click--------------------------------------
步入正題,怎么在android studio 上使用eventbus。
首先,什么是eventbus,
eventbus? 事件總線,顧名思義,EventBus是一款針對Android優(yōu)化的發(fā)布/訂閱事件總線。
主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,線程之間傳遞消息.優(yōu)點(diǎn)是開銷小,代碼更優(yōu)雅。以及將發(fā)送者和接收者解耦。
jar包下載路徑:
2.4
http://jcenter.bintray.com/de/greenrobot/eventbus/2.4.0
3.0
http://jcenter.bintray.com/de/greenrobot/eventbus/3.0.0-beta1/
實(shí)戰(zhàn)
1、導(dǎo)包
在android studio中,導(dǎo)包不需要下載jar包導(dǎo)入,而是 直接在build.gradel中配置,android studio 會(huì)自動(dòng)在jcenter倉庫中找到所對應(yīng)的包
dependencies{
compile fileTree(dir:'libs',include: ['*.jar'])
compile'com.android.support:appcompat-v7:23.0.0'
//eventBus所需要的包
compile'de.greenrobot:eventbus:2.4.0'
}
注意
2、新建Event類,根據(jù)項(xiàng)目需求,構(gòu)建不同的Event類
/**
* event類
* Created by Jeff on 2016/1/12.
*/
public classAnyEvent {
privateStringdiscribe;
//構(gòu)造函數(shù)
publicAnyEvent(String discribe) {
this.discribe= discribe;
}
//set/get方法
public voidsetDiscribe(String discribe) {
this.discribe= discribe;
}
publicStringgetDiscribe() {
returndiscribe;
}
}
3、發(fā)布事件
private voidinitView(){
btn=(Button)findViewById(R.id.btn);
btn.setOnClickListener(newView.OnClickListener() {
@Override
public voidonClick(View v) {
EventBus.getDefault().post(newAnyEvent("nothing is impossible!"));
}
});
}
4、在訂閱事件的activity上注冊(在oncreate()/onresume()中注冊,務(wù)必在ondestroy()/onpause()中取消注冊)
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
//注冊
EventBus.getDefault().register(this);
}
5、訂閱事件,有四種可選方式接收事件:
onEvent();??????? ------------------------->接收事件和分發(fā)事件在同一個(gè)線程中執(zhí)行
onEventMainThread();???? ----------->接收事件永遠(yuǎn)在UI線程執(zhí)行
onEventBackgroundThread();? --->分發(fā)事件在UI線程?啟動(dòng)子線程運(yùn)行接收事件:在分發(fā)線程接收事件
onAsync();?????? ------------------------->直接另起線程接收事件
/**
*使用onEvent來接收事件,那么接收事件和分發(fā)事件在一個(gè)線程中執(zhí)行
*@paramevent
*/
public voidonEvent(AnyEvent event) {
}
/**
*使用onEventMainThread來接收事件,那么不論分發(fā)事件在哪個(gè)線程運(yùn)行,接收事件永遠(yuǎn)在UI線程執(zhí)行
*可以用來更新UI
*@paramevent
*/
public voidonEventMainThread(AnyEvent event) {
}
/**
*使用onEventBackgroundThread來接收事件,如果分發(fā)事件在子線程運(yùn)行,那么接收事件直接在同樣線程
*運(yùn)行,如果分發(fā)事件在UI線程,那么會(huì)啟動(dòng)一個(gè)子線程運(yùn)行接收事件
*@paramevent
*/
public voidonEventBackgroundThread(AnyEvent event) {
}
/**
*使用onEventAsync接收事件,無論分發(fā)事件在(UI或者子線程)哪個(gè)線程執(zhí)行,接收都會(huì)在另外一個(gè)子線程執(zhí)行
*@paramevent
*/
public voidonEventAsync(AnyEvent event) {
}
6、在訂閱事件的activity上取消注冊(在oncreate()/onresume()中注冊,務(wù)必在ondestroy()/onpause()中取消注冊)
@Override
protected voidonDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}