Android的EventBus和butterknife基本使用

Android的EventBus和butterknife基本使用

使用AndroidEventBus和butterknife能够提高项目的解耦性和执行性能,是比较常用的工具。
1、Android 的EventBus基本使用
配置环境:
1、在module的配置文件加入:compile ‘org.greenrobot:eventbus:3.0.0’ 同步即可使用eventbus。
2、或者到https://github.com/greenrobot/EventBus下载工程,导入文件夹里的EventBus进工程,在
配置文件中加入:compile project(‘:EventBus’) 再同步一下即可。
使用步骤:
(1)在接收的activity中订阅事件:EventBus.getDefault().register(this);
(2)定义实体event:

package com.example.eventbustest;
public class eventBean {
    private String message;
    private String id;
    eventBean(String message,String id)
    {
        this.message = message;
        this.id = id;
    }
    public void setId(String id) {
        this.id = id;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getId() {
        return id;
    }

    public String getMessage() {
        return message;
    }
}

(3)写事件发布处理函数:这里暂时以POSTING这种执行方式为例,后面讲解4种执行方式。

    @Subscribe(threadMode = ThreadMode.POSTING)
    public void onEventPostThread(eventBean event)
    {

        Log.e("tag",event.getMessage()+"  onEventPostThread run in : "+Thread.currentThread().getName());
        Toast.makeText(MainActivity.this,"get: "+ event.getMessage(),Toast.LENGTH_LONG).show();
    }

(4)发布事件: EventBus.getDefault().post(new eventBean(“hello”,”id”));
以上是EventBus的使用常见基本步骤。下面以例子说明:
效果如下:
这里写图片描述
点击第二个activity的按钮发布事件到第一个activity中,toast出接收的信息。
下面是主函数(第一个activity)的程序:

package com.example.eventbustest;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*
        * 订阅事件
        * */
        EventBus.getDefault().register(this);
        Button button = (Button) findViewById(R.id.mbtn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,testActivity.class);
                startActivity(intent);
            }
        });
    }
    @Subscribe(threadMode = ThreadMode.POSTING)
    public void onEventPostThread(eventBean event)
    {

        Log.e("tag",event.getMessage()+"  onEventPostThread run in : "+Thread.currentThread().getName());
        Toast.makeText(MainActivity.this,"get: "+ event.getMessage(),Toast.LENGTH_LONG).show();
    }
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEventMain(eventBean event)
    {
        Log.e("tag",event.getMessage()+"onEventMain run in : "+Thread.currentThread().getName());
    }
    @Subscribe(threadMode = ThreadMode.BACKGROUND)
    public void onEventBackground(eventBean event)
    {
        Log.e("tag",event.getMessage()+"onEventBackground run in : "+Thread.currentThread().getName());
    }
    @Subscribe(threadMode = ThreadMode.ASYNC)
    public void onEventAsyc(eventBean event)
    {
        Log.e("tag",event.getMessage()+"onEventAsyc run in : "+Thread.currentThread().getName());
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        /*
        * 注销
        * */
        EventBus.getDefault().unregister(this);
    }
}

下面是第二个activity程序:

package com.example.eventbustest;

import android.app.Activity;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.util.Log;
import android.view.View;

import org.greenrobot.eventbus.EventBus;

/**
 * 在这个activity中发送消息
 */

public class testActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.eventbus);

        findViewById(R.id.sbtn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("tag","onclick run in : "+Thread.currentThread().getName());
                //发送信息
                EventBus.getDefault().post(new eventBean("hello","id"));
                finish();
            }
        });
    }
}

程序比较简单,这里重点讲解一下关于接收处理发布事件的函数执行模式:
Android 3.0 以前使用onEvent、onEventMainThread 、onEventBackgroundThread 、onEventAsync 这四个函数来处理接收事件。在Android 3.0以后开始使用注解模式来接收处理发布事件,处理的函数名可以随意命名,注解可以注明处理事件执行的模式:PostThread(默认)、MainThread、BackgroundThread与Async。下面是这些模式的使用说明
/*Android 3.0的处理模式:
* 在onEventMainThread中接收消息
* 接收函数还有以下接收事件的函数
* 1、onEvent 发布事件和接收事件线程在同一个线程,不能实现耗时动作
* 2、onEventMainThread UI线程中执行,不能实现耗时动作
* 3、onEventBackgroundThread 若事件从UI中发布则在子线程执行,否则在同意线程执行。
* 4、onEventAsync 在子线程执行
*注:对于使用同一个函数来接收的不同事件,系统自动根据接收参数来判断使用哪个函数。
* /

/ * Android3.0以后,事件订阅处理使用注解方式,可以任意命名处理函数名,使用处理
* 模式有PostThread(默认)、MainThread、BackgroundThread与Async
* PostThread在不指定处理方式情况下默认使用,该模式为发布事件和接收事件在同一个线程
* MainThread事件在UI线程执行
* BackgroundThread若事件从UI中发布则在子线程执行,否则在同意线程执行。
* Async事件在子线程中执行
* */
关于几种模式运行的例子,可参照上面的主函数里面方式验证,即打印出几个处理函数执行的线程名,效果如下:
这里写图片描述
关于eventbus的性能和详细介绍,可参考原版:http://greenrobot.org/eventbus/,这里只给出了eventbus的基本使用。

2、butterknife的基本使用:
环境配置:在File–>project structure—>dependecies—>library dependency搜索butterknife导入即可,也可通过项目方式导入等。
使用:使用比较简单,现在使用的activity中绑定ButterKnife.bind(this);
接着使用butterknife才能生效,例如想加载view资源,可通过
@BindView(R.id.mbtn)Button mb;这样就可以使用此按钮,
通过 @OnClick(R.id.sbtn)监听事件 ,@OnLongClick(R.id.sbtn)监听长按事件,@OnItemClick(R.id.sbtn)监听listview的点击事件,还可在listadapter中的viewhowe通过bindview寻找view控件使用。
又如监听多个按钮:

    @OnClick({R.id.title_location_iv, R.id.title_settings_ib})
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.title_location_iv:

                break;
            case R.id.title_settings_ib:

                break;
        }
    }

关于butterknife的使用比较简单,就是代替了findViewById等,使得效率提高,节藕性提高,更加易于阅读。
贴上例子:
http://download.csdn.net/detail/tang_vincent/9886290

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值