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

Android的EventBus和butterknife基本使用

2017-07-17 15:03 281 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐