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
相关文章推荐
- Android Butterknife Zelezny插件在Android Studio中的基本使用
- Android Butterknife框架基本使用教程
- Android注解利器:ButterKnife 的基本使用
- Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny
- Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny
- Android Butter Knife使用说明
- 在Eclipse或者ADT中使用ButterKnifeZelezny,Android组件初始化从此变得简单易懂!!!!,androideclipseadt 一、起因 想必使用And
- android studio Butter Knife按钮事件注入的使用设置
- Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny
- Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny(转)
- 在Eclipse或者ADT中使用ButterKnifeZelezny,Android组件初始化从此变得简单易懂!!!!,androideclipseadt
- Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny
- 在Eclipse或者ADT中使用ButterKnifeZelezny,Android组件初始化从此变得简单易懂!!!!
- Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny
- Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny
- Android Studio中 Android butterKnife Zelezny和 Android Parcelable code generator的使用(备忘录)
- android注解框架ButterKnife详细使用文档(v7.0.1)
- Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny
- Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny
- android(android studio)中使用注解框架butterknife