otto使用心得与存在问题
来源:互联网 发布:小米4s网络制式参数 编辑:程序博客网 时间:2024/05/17 22:00
话不多说,直奔主题。
OTTO是Square推出的事件总线库类似的库还有eventbus等,otto的官方地址:https://github.com/square/otto.
1.使用介绍
1.1:首先在项目的build中进行引入:compile ‘com.squareup:otto:+’
1.2:为了使用方便,通常我们会为了使用方便新建一个Mybus继承至Bus,使用单例模式来进行使用,代码如下:
public class MyBus extends Bus { //通过单例模式返回唯一的bus对象,而且重写父类的post方法,通过handler实现任意线程可以调用 private Handler mHandler = new Handler(Looper.getMainLooper()); private static Bus bus = new MyBus(); private MyBus() { } public static Bus getInstance() { return bus; } @Override public void post(final Object event) { if (Looper.myLooper() == Looper.getMainLooper()) { super.post(event); } else { mHandler.post(new Runnable() { @Override public void run() { MyBus.super.post(event); } }); } }}
2.然后创建一个实体类TestUser
public class TestUser { private String name; private int age; public TestUser(String name, int age, int sex) { this.name = name; this.age = age; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } private int sex;}
3.在activity里面进行注册与发送,发送方式有两种:
第一种:直接通过post(object o)方法进行发送(貌似我没成功)
MyBus.getInstance().post(user);
第二种:通过对方法注解Produce(这种方式是成功了的)
@Produce public TestUser providerEvent(){ TestUser eventData = new TestUser("测试",18,1); return eventData; }
public class WebActivity extends AppCompatActivity { TextView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_web); MyBus.getInstance().register(this); webView = (TextView) findViewById(R.id.tv); webView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { providerEvent();// TestUser user=new TestUser("测试",18,1);// MyBus.getInstance().post(user); startActivity(new Intent(WebActivity.this, MainActivity.class)); } }); } @Produce public TestUser providerEvent(){ TestUser eventData = new TestUser("测试",18,1); return eventData; } @Override protected void onDestroy() { super.onDestroy(); MyBus.getInstance().unregister(this); }}
4.在接受的activity或者fragment里面进行注册,在自定义方法里面通过@Subscribe进行操作,代码如下:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyBus.getInstance().register(this); } @Subscribe //这里的方法名可以随便写,只需要@Subscribe就可以了(注意,括号里面的实体必须是你发送的实体才能接受到数据) public void onMyEvent(TestUser user) { //如果发送的是UserEvent对象则会接收到信息,否则不会 Log.e("liluo","哈哈哈"); if (user == null || isFinishing()) { return; } Toast.makeText(this, "姓名:" + user.getName() + "年龄:" + user.getAge(), Toast.LENGTH_LONG).show(); } @Override protected void onDestroy() { super.onDestroy(); MyBus.getInstance().unregister(this); }}
好啦,到此基本使用就结束啦!欢迎熟悉者告知为啥post的方式不能收到消息!谢谢。
阅读全文
0 0
- otto使用心得与存在问题
- otto使用心得与存在问题
- otto与EventBus对比
- Otto使用入门
- Android Otto 的使用
- Android Otto 使用
- OTTO框架使用介绍。
- otto使用总结
- Otto使用记录
- Otto的使用
- Otto框架的使用
- Otto简单使用
- Otto的封装使用
- Otto的使用
- android中的 Otto使用
- Otto使用入门
- springboot个人使用问题与心得(1)
- Otto与EventBus框架比较
- 第五周项目3---括号的匹配
- Photoshop详细教程四之滤镜/视图/窗口基本功能介绍
- solr分片后副本数据不一致的问题
- 石子合并 BZOJ
- 12种排序算法
- otto使用心得与存在问题
- 给缺少PYTHON项目实战经验的人
- 针对ArcGIS Server 跨域问题的解释
- 关于VS2015调试DX11的HLSL着色器代码的方法与步骤
- 用redis实现支持优先级的消息队列
- pyspark- ml-features
- Java多线程(一)
- 九型人格的智慧-第三章(本性和人格)
- FileReader 获取图片BASE64 代码 并预览