導入依賴:
compile 'de.greenrobot:eventbus:3.0.0-beta1'
package com.example.my_eventbus;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import de.greenrobot.event.EventBus;
import de.greenrobot.event.Subscribe;
import de.greenrobot.event.ThreadMode;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.tv1);
//註冊事件
EventBus.getDefault().register(this);
}
//事件的處理會在UI線程中執行。事件處理時間不能太長,這個不用說的,長了會ANR的。
//接口數據
@Subscribe(threadMode = ThreadMode.MainThread,priority = 1)
public void fun(String msg){
Log.e("fun: ",msg );
//text.setText(msg+"厲害了");
}
//事件的處理在和事件的發送在相同的進程,所以事件處理時間不應太長,不然影響事件的發送線程。
@Subscribe(threadMode = ThreadMode.PostThread,priority = 2)
public void fun2(String msg){
Log.e("fun2: ",msg );
//text.setText(msg+"太厲害了");
}
//事件處理會在單獨的線程中執行,主要用於在後臺線程中執行耗時操作,每個事件會開啓一個線程
@Subscribe(threadMode = ThreadMode.Async,priority = 3)
public void fun3(String msg){
Log.e("fun3: ",msg );
}
/**
如果事件是在UI線程中發佈出來的,那麼事件處理就會在子線程中運行,
如果事件本來就是子線程中發佈出來的,那麼事件處理直接在該子線程中執行。
所有待處理事件會被加到一個隊列中,由對應線程依次處理這些事件,
如果某個事件處理時間太長,會阻塞後面的事件的派發或處理。
**/
@Subscribe(threadMode = ThreadMode.BackgroundThread,priority = 4)
public void fun4(String msg){
Log.e( "fun4: ", msg);
}
//跳轉
public void btn(View view){
startActivity(new Intent(this,Main2Activity.class));
}
//銷燬
@Override
protected void onDestroy() {
super.onDestroy();
//避免內存泄漏和內存溢出,回收內存資源(android性能優化的一部分:
// 內存優化、啓動優化、網絡優化、電量優化、ui繪製優化
EventBus.getDefault().unregister(this);
}
}
main2Activity(發佈者)
package com.example.my_eventbus;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import de.greenrobot.event.EventBus;
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
//先註冊後發送訂閱信息
EventBus.getDefault().post("Main2註冊後發佈的哦");
//線發佈後註冊 Eventbus粘性事件
EventBus.getDefault().postSticky("Main2發送後註冊的哦");
startActivity(new Intent(this,Main3Activity.class));
}
}
main3Activity(訂閱者)
package com.example.my_eventbus;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import de.greenrobot.event.EventBus;
import de.greenrobot.event.Subscribe;
import de.greenrobot.event.ThreadMode;
public class Main3Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
//註冊事件
EventBus.getDefault().register(this);
}
//接收訂閱
@Subscribe(sticky = true,threadMode = ThreadMode.MainThread)
public void getFun(String msg){
Toast.makeText(this,msg, Toast.LENGTH_SHORT).show();
}
}