初步使用EventBus时所遇到的一些问题
2018-03-06 11:05
239 查看
背景:对照EventBus官方文档的实例,创建一个MessageEvent类(传递的数据),创建一个名为FirstAcivity的Activity(数据接收方),创建一个名为SecondActivity的Activity(数据发送方)。
接下来看看具体实现过程MessageEvent:
public class MessageEvent{
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}FirstActivity:(这里只贴出主要代码)
@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this);//EventBus注册
}
@Override
protected void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);//EventBus注册
}
//接受数据
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
tvData.setText(event.getName() + event.getAge());
}SecondActivity:
private void initData() {
messageEvent = new MessageEvent();
messageEvent.setName("张三");
messageEvent.setAge("18");
}
public void onClick(View view) {
EventBus.getDefault().post(messageEvent);//发送数据
finish();
}
出现问题:运行程序点击操作后发现没有达到预期效果(没有收到返回值)。
仔细查看Logcat后发现如下图所示的EventBus日志(大概意思就是所没有注册或者取消了注册)分析:
再Activity的onStart生命周期中实现了注册,而再onStop中实现了注销。接下来分析一下FirstActivity的生命周期,FirstActivity----点击按钮跳转SecondActivity-----FirstActivity
当跳转到SecondActivity时,FirstActivity执行了onStop(注销),再次返回FirstActivity时执行onStart(注册),
按道理应该时没有问题的。再次仔细观察生命周期如下图,并结合发送数据的代码发现
发送数据的时候FirstActivity的onStart生命周期还没有执
887e
行也就是还没有执行注册代码。
实践证明:将EventBus.getDefault().post(messageEvent);//发送数据这行代码放到SecondActivity的onStop中运行(也就是再FirstActivity的onStart执行后再发送数据),发现可以接收到数据。
ok,到这就分析完了。
解决:
一劳永逸的解决方法:再onCreate中注册,onDestory中注销。其他需要注意的是:接收数据的Activity必须是事先存在Activity栈中的(如果FirstActivity--->SecondActivity新启动的一个页面,并且向SecondActivity传值,这时SecondActivity并不能接收到)
传输的数据类型必须为一个对象(如:int需要转换为Integer)
相关文章推荐
- Myeclipse 2013 初步使用遇到的一些问题
- 使用webchart过程中遇到的一些问题
- 使用desinger时遇到的一些问题的处理分享
- 使用 swfupload 遇到的一些问题
- 使用Linq 更新数据库时遇到的一些问题及解决办法
- 使用DEDECMS中遇到的一些零碎问题
- tomcat,jboss使用中遇到的一些问题的解决
- 使用Linq 更新数据库时遇到的一些问题及解决办法
- Struts2.1.8 验证框架(validation)的使用中遇到的一些问题(直接访问jsp遇到的错误)
- Java赋值运算符(+=、-=、*=、/=)使用中遇到的一些问题
- 关于IIS在使用中遇到的一些问题的总结
- 我在Eclipse中使用Tomcat插件的遇到的一些问题
- [项目过程中所遇到的各种问题记录]ORM篇——使用NHibernate配置对象实体的一些小问题
- 使用LWUIT中遇到的一些问题
- tomcat,jboss使用中遇到的一些问题的解决
- 使用自动生成Mipmap时遇到的一些问题
- [项目过程中所遇到的各种问题记录]ORM篇——使用NHibernate配置对象实体的一些小问题 22
- 使用ajax遇到的一些小问题
- 使用GridView时遇到的一些小问题及解决方法
- 关于用c生成的dll在使用其他供应商的工具创建可执行模块时遇到的一些问题