您的位置:首页 > 移动开发 > Android开发

Android EventBus的初步使用

2017-02-16 17:27 253 查看
EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。

尝试写了一个小Demo初步使用EventBus。直接上代码:

在 MainActivity 类当中:

package com.szkingdom.android.phone.eventbusdemo;

import android.content.Intent;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import android.widget.Toast;

import org.greenrobot.eventbus.EventBus;

import org.greenrobot.eventbus.Subscribe;

import org.greenrobot.eventbus.ThreadMode;

public class MainActivity extends AppCompatActivity {

    private Button mBtn;

    private TextView mTv;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        //注册

        EventBus.getDefault().register(this);//订阅

        mBtn = (Button) findViewById(R.id.btn);

        mTv = (TextView) findViewById(R.id.tv);

        mBtn.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

               startActivity(new Intent( MainActivity.this , SecondActivity.class));

            }

        });

    }

    @Override

    protected void onDestroy() {

        super.onDestroy();

        // 解绑

        EventBus.getDefault().unregister(this);

    }

    @Subscribe(threadMode = ThreadMode.MAIN) //在ui线程执行

    public void onDataSynEvent( MyEventBus event) {

        mTv.setText( event.getMessage());

        Toast.makeText( this , event.getMessage() , Toast.LENGTH_SHORT).show();

    }

}

SecondActiviyt 类:

package com.szkingdom.android.phone.eventbusdemo;

import android.content.Intent;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import android.widget.Toast;

import org.greenrobot.eventbus.EventBus;

import org.greenrobot.eventbus.Subscribe;

import org.greenrobot.eventbus.ThreadMode;

public class SecondActivity extends AppCompatActivity {

private Button mBtn;

    private TextView mTv;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_second);

        // 注册

        EventBus.getDefault().register(this);

        mBtn = (Button) findViewById(R.id.secondBtn);

        mTv = (TextView) findViewById(R.id.secondTv);

        mBtn.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                startActivity( new Intent( SecondActivity.this , ThridActivity.class));

            }

        });

    }

    @Override

    protected void onDestroy() {

        super.onDestroy();

        EventBus.getDefault().unregister(this);

    }

    @Subscribe(threadMode = ThreadMode.MAIN) //在ui线程执行

    public void onDataSynEvent(SecondEventBus event) {

        mTv.setText( event.getMessage());

        Toast.makeText( this , event.getMessage() , Toast.LENGTH_SHORT).show();

    }

}

ThridActiity 类:

package com.szkingdom.android.phone.eventbusdemo;

import android.os.Bundle;

import android.support.annotation.Nullable;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.Button;

import org.greenrobot.eventbus.EventBus;

/**

 * Created by KDS on 2017/2/16.

 */

public class ThridActivity extends AppCompatActivity {

    private Button mBtn;

    @Override

    protected void onCreate(@Nullable Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_third);

        mBtn = (Button) findViewById(R.id.btn);

        mBtn.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                System.out.println( "send the date over...");

                EventBus.getDefault().post( new MyEventBus( "this is the big date ... money 11111111111111111"));

                EventBus.getDefault().post( new SecondEventBus( "this is the big date ... money 2222222222222222222"));

                ThridActivity.this.finish();

            }

        });

    }

}

MyEventBus 类:

package com.szkingdom.android.phone.eventbusdemo;

/**

 * Created by KDS on 2017/2/16.

 */

public class MyEventBus {

    private String message ;

    public MyEventBus( String message ){

        this.message = message;

    }

    public String getMessage(){

        return this.message;

    }

}

SecondEventBus类和MyEventBus类类似。

注意在使用的时候需要添加依赖库: compile 'org.greenrobot:eventbus:3.0.0' 才可以是用 EventBus。

并且方法名onDataSynEvent可以随意命名,只要在方法上面添加相关注解就可以了。

可参看博客地址:http://www.cnblogs.com/whoislcj/p/5595714.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  EventBus