EventBus简介
EventBus是Android和Java的发布/订阅事件总线。
EventBus …
简化了组件之间的通信
将事件发送者和接收者分离
在活动,片段和后台线程中表现良好
避免复杂且容易出错的依赖关系和生命周期问题
使您的代码更简单
很快
很小(约50k罐)
已经通过100,000,000+安装的应用程序在实践中得到证实
具有交付线程,用户优先级等高级功能。
EventBus分三个步骤
1.定义事件:
public static class MessageEvent { / *如果需要,还有其他字段* / }
2.准备订阅者:声明并注释您的订阅方法,可选择指定一个线程模式:
@Subscribe(threadMode = ThreadMode 。 MAIN)
公共 无效 onMessageEvent(MessageEvent的事件){ / *做一些事情* / };
注册和注销您的订阅者。例如,在Android上,活动和片段通常应根据其生命周期进行注册:
@Override
public void onStart(){
super 。调用onStart();
EventBus 。getDefault()。注册(这);
}
@Override
public void onStop(){
super 。的onStop();
EventBus 。getDefault()。取消注册(这个);
}
3.发布活动:
EventBus 。getDefault()。post(new MessageEvent());
将EventBus添加到您的项目中
通过Gradle:
实施 implementation ‘org.greenrobot:eventbus:3.1.1’
通过Maven:
< 依赖 > < groupId > org.greenrobot </ groupId > < artifactId > eventbus </ artifactId > < version > 3.1.1 </ version > </ dependency >
或者从Maven Central 下载最新的JAR。
Fragment中实现
package com.example.lessson0807one.fragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.example.lessson0807one.Mymessage;
import com.example.lessson0807one.R;
import org.greenrobot.eventbus.EventBus;
/**
* A simple {@link Fragment} subclass.
*/
public class EventBusFragment extends Fragment {
public EventBusFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View inflate = inflater.inflate(R.layout.fragment_event_bus, container, false);
TextView textView = inflate.findViewById(R.id.ccccc);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Mymessage mymessage = new Mymessage("揪");
EventBus.getDefault().post(mymessage);
}
});
return inflate;
}
}
Activity中实现
package com.example.lessson0807one.activity;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import com.example.lessson0807one.Mymessage;
import com.example.lessson0807one.R;
import com.example.lessson0807one.fragment.EventBusFragment;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
public class EventBusActivity extends AppCompatActivity {
private static final String TAG = "EventBusActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event_bus);
FragmentManager supportFragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
fragmentTransaction.add(R.id.asjdklas,new EventBusFragment());
fragmentTransaction.commit();
EventBus.getDefault().register(this);
}
@Subscribe
public void messagesa(Mymessage s){
Log.i(TAG, "Message: "+s.toString());
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
}