Android(安卓)EventBus发布/订阅事件总线
16lz
2021-01-26
做过Android开发都会陆续用到这个开源库EventBus。EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。下载EventBus的类库源码:https://github.com/greenrobot/EventBus。下面说说简单用法。
本文项目资源下载:
一、先定义一个消息实体类MainSendEvent
package com.example.eventbusdemo;/** * 事件消息实体类 * @author mmxs * */public class MainSendEvent {protected String mstrMsg;public MainSendEvent(String msg) { mstrMsg = msg;}public String getStringMsgData(){return mstrMsg;}}二、MainActivity
package com.example.eventbusdemo;import de.greenrobot.event.EventBus;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import android.app.Activity;import android.content.Intent;public class MainActivity extends Activity implements OnClickListener{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//事件注册EventBus.getDefault().register(this);InitUI();}private void InitUI() {Button button = (Button)findViewById(R.id.button1);button.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button1:Intent intent = new Intent();intent.setClass(MainActivity.this, TwoActivity.class);startActivity(intent);break;default:break;}}//事件接受public void onEventMainThread(MainSendEvent event){if(event != null){Toast.makeText(getApplicationContext(),"MainActivity接受数据" + event.getStringMsgData(),Toast.LENGTH_LONG).show();TextView textView = (TextView)findViewById(R.id.textView1);textView.setText(event.getStringMsgData());}}@Overridepublic void onDestroy() {//取消注册EventBus.getDefault().unregister(this);super.onDestroy();}}三、TwoActivity
package com.example.eventbusdemo;import de.greenrobot.event.EventBus;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;/** * 第二个TwoActivity发送事件 * @author mmsx * */public class TwoActivity extends Activity implements OnClickListener{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_two);Button button = (Button)findViewById(R.id.button1);button.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button1://事件发送EventBus.getDefault().post(new MainSendEvent("from TwoActivity msg"));break;default:break;}}}四、两个activity的布局
1、activity_main
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="第二个activity" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /></LinearLayout>2、activity_two
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="MainActivity" /></LinearLayout>在这上面总体上实践就是在activity间消息传递。我们先进去的是MainActivity。然后按button进入第二个activity。在第二个activity按一下button发送数据到MainActivity,用Toat弹出以及settext。返回MainActivity后能看到settext效果。
五、效果图
六、简单来说的流程
1、事件注册或者订阅
EventBus.getDefault().register(this);2、事件注册或者订阅后的接受
public void onEventMainThread(MainSendEvent event){if(event != null){Toast.makeText(getApplicationContext(),"MainActivity接受数据" + event.getStringMsgData(),Toast.LENGTH_LONG).show();TextView textView = (TextView)findViewById(R.id.textView1);textView.setText(event.getStringMsgData());}}3、事件注册或者订阅取消
EventBus.getDefault().unregister(this);这上面3点是一起,同一个页面。
4、事件的发送者
EventBus.getDefault().post(new MainSendEvent("from TwoActivity msg"));七、参考文章
http://blog.csdn.net/harvic880925/article/details/40660137
http://blog.csdn.net/lmj623565791/article/details/40920453
最后
项目资源下载:
转载请注明出处的博客网址: http://blog.csdn.net/qq_16064871
如有转载未注明出处博客网址,或者没有得到作者的同意。作者持有版权所有权。
更多相关文章
- Android中MQTT的简单实现(只是连接到服务器,未实现发送、接受信息)
- Android程序设计逻辑分析之用户事件响应-回调函数的使用
- Android(安卓)四大组件理解.
- 系统音乐播放器暂停、播放的控制
- Android(安卓)EventBus你需要了解的都在这
- Android注册设备管理器(获取超级管理员权限)
- Android(安卓)开发——浅谈onInterceptTouchEvent、onTouchEvent
- Android笔记---使用HttpClient发送POST和GET请求
- Android——自定义AlertDialog