之前 一直使用eclipse进行android开发,现在到公司实习,要求使用android studio 进行开发,适应了几天慢慢习惯了android studio,初步感觉确实比eclipse好用很多。

-------------------------------click--------------------------------------

步入正题,怎么在android studio 上使用eventbus。

首先,什么是eventbus,

eventbus  事件总线,顾名思义,EventBus是一款针对Android优化的发布/订阅事件总线。

主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。

 

实战

1、导包

在android studio中,导包不需要下载jar包导入,而是 直接在build.gradel中配置,android studio 会自动在jcenter仓库中找到所对应的包

dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    compile 'com.android.support:appcompat-v7:23.0.0'    //eventBus所需要的包    compile 'de.greenrobot:eventbus:2.4.0'}

注意




2、新建Event类,根据项目需求,构建不同的Event类

/** * event * Created by Jeff on 2016/1/12. */public class AnyEvent {    private String discribe;    //构造函数    public AnyEvent(String discribe) {        this.discribe = discribe;    }    //set/get方法    public void setDiscribe(String discribe) {        this.discribe = discribe;    }    public String getDiscribe() {        return discribe;    }}


3、发布事件

private void initView(){    btn=(Button)findViewById(R.id.btn);    btn.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            EventBus.getDefault().post(new AnyEvent("nothing is impossible!"));        }    });}




4、在订阅事件的activity上注册(在oncreate()/onresume()中注册,务必在ondestroy()/onpause()中取消注册)

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    initView();    //注册    EventBus.getDefault().register(this);}


5、订阅事件,有四种可选方式接收事件:

onEvent();        ------------------------->接收事件和分发事件在同一个线程中执行

onEventMainThread();     ----------->接收事件永远在UI线程执行

onEventBackgroundThread();  --->分发事件在UI线程?启动子线程运行接收事件:在分发线程接收事件

onAsync();       ------------------------->直接另起线程接收事件

/** * 使用onEvent来接收事件,那么接收事件和分发事件在一个线程中执行 * @param event */public void onEvent(AnyEvent event) {}/** * 使用onEventMainThread来接收事件,那么不论分发事件在哪个线程运行,接收事件永远在UI线程执行 * 可以用来更新UI * @param event */public void onEventMainThread(AnyEvent event) {}/** * 使用onEventBackgroundThread来接收事件,如果分发事件在子线程运行,那么接收事件直接在同样线程 * 运行,如果分发事件在UI线程,那么会启动一个子线程运行接收事件 * @param event */public void onEventBackgroundThread(AnyEvent event) {}/** * 使用onEventAsync接收事件,无论分发事件在(UI或者子线程)哪个线程执行,接收都会在另外一个子线程执行 * @param event */public void onEventAsync(AnyEvent event) {}


6、在订阅事件的activity上取消注册(在oncreate()/onresume()中注册,务必在ondestroy()/onpause()中取消注册)

@Overrideprotected void onDestroy() {    super.onDestroy();    EventBus.getDefault().unregister(this);}

更多相关文章

  1. 浅谈Android的Choreographer
  2. android AsyncTask 源码剖析
  3. android 触发Button按钮事件的三种方式
  4. Android学习―Button的四种OnClick响应方法
  5. Android(安卓)Material Design Library系列教程(五)
  6. Android培训班(19)
  7. Android获取返回键的点击事件
  8. Android(安卓)ANR 分析学习总结(转)
  9. android footerView 的使用

随机推荐

  1. Android(安卓)默认AP名字,以及AP名字存储
  2. android 监听手机电量变化
  3. android 3D-纹理------球的纹理
  4. 解决Android(安卓)sdk manager无法访问go
  5. spring mvc + mybatis 构建 cms 内容发布
  6. Android为ListView的Item设置不同的布局
  7. Android快速开发工具:AndroidAnnotations:
  8. Android实现水波纹扩散效果的实例代码
  9. 编译cubieboard android 源码过程详解之(
  10. Flutter-基础组件2