Fastlib中全局广播使用

fastLib库是一个Android平台通用库,能快速提高项目效率。库地址:fastlib库

有时候我们想要在模块间,线程间进行通信。比如某个Activity中的Fragment中的Fragment想与另一个Activity进行通信,传递信息。也许我们可以一层一层的引用,但是很明显这样不但麻烦并且逻辑变的混乱

这时我们可以借助“全局广播”这样一个工具来帮助我们简化这样的工作流程

想要使用Fastlib中的全局广播需要先初始化,这一步建议放到Application中

EventObserver.build(Context);
对订阅者进行事件订阅

EventObserver.getInstance().subscribe(subscriber);

不需要订阅事件时应解注册

EventObserver.getInstance().unsubscribe(this);

这个订阅者应声明一个订阅方法,使用@Event注解来标明订阅方法

@Event
public void receiveMessage(MessageClass mb){
    dosomething
}

上两个步骤就可以开启一个事件的监听,等待事件的到来

在另外的模块或线程中如果想要发送一个事件只需要使用EventObserver.sendEvent(Object)的方法

EventObserver.getInstance().sendEvent(Object);
而发送的事件类将会发送到对应的订阅者中

下面我写一个小例子来帮助大家更好理解

事件类

public class MessageBean{
    private String mMessage;

    public MessageBean(String message) {
        mMessage = message;
    }

    public String getMessage() {
        return mMessage;
    }
}

第一个Activity作为注册者,注册的事件类为MessageBean

public class MainActivity extends AppCompatActivity{
    TextView mMessage;
    Button mStartSecondActivity;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EventObserver.build(this); //初始化EventObserver,这一步应放到Application中,这里为了演示简单化就放这里了
        EventObserver.getInstance().subscribe(this); //注册全局广播,注册者为MainActivity自身
        initViews();
    }

    private void initViews(){
        mMessage= (TextView) findViewById(R.id.message);
        mStartSecondActivity= (Button) findViewById(R.id.bt);
        mStartSecondActivity.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                startActivity(new Intent(MainActivity.this,SecondActivity.class));
            }
        });
    }

    /**
     * 订阅方法。订阅对象为MessageBean类
     * @param mb
     */
    @Event
    public void receiveMessage(MessageBean mb){
        mMessage.setText(mb.getMessage());
    }
    
    @Override
    public void onDestroy(){
        super.onDestroy();
        EventObserver.getInstance().unsubscribe(this); //在actiivty关闭时解除注册
    }
}

第二个Activity作为广播发送者,发送MessageBean事件类

public class SecondActivity extends AppCompatActivity{
    EditText mEdtMessage;
    Button mSendMessage;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        init();
    }

    private void init(){
        mEdtMessage= (EditText) findViewById(R.id.content);
        mSendMessage= (Button) findViewById(R.id.sendMessage);
        mSendMessage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EventObserver.getInstance().sendEvent(new MessageBean(mEdtMessage.getText().toString())); //发送广播,内容为id为content的编辑框中的内容
            }
        });
    }
}

两个Activity的布局

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="空闲"/>

    <Button
        android:id="@+id/bt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="启动第二个activity"/>
</LinearLayout>
---分割线---
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <EditText
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/sendMessage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送"/>
</LinearLayout>

注:切记在不使用时解除注册,否则可能造成内存泄漏

如有其它问题请在下方评论,我仅可能及时回复
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值