from : 

http://www.th7.cn/Program/Android/201704/1153607.shtml



问题

比如界面MainActivity向界面SecondActivity发送消息时,界面S调用接收方法,可以接收界面M发送的消息,输出台log可以打印出消息内容,但是无法更新UI。


MainActivity
 Button eventBus= (Button) findViewById(R.id.eventbus);    RxView.clicks(eventBus)            .throttleFirst(1,TimeUnit.SECONDS)            .observeOn(AndroidSchedulers.mainThread())            .subscribe(new Consumer() {                @Override                public void accept(@NonNull Object o) throws Exception {                    EventBus.getDefault().postSticky(new MessageEvent("MainActivity:this is Sticky"));                    startActivity(SecondActivity.class);                }            });'   
SecondActivity
 @Override @org.greenrobot.eventbus.Subscribeprotected void onCreate(@Nullable Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    UtilsLog.i("主线程Id="+Thread.currentThread().getId()+",主线程名字="+Thread.currentThread().getName());    setContentView(R.layout.activity_second);    EventBus.getDefault().register(this);    initView();}private void initView() {    show= (TextView) findViewById(R.id.result);    show.setText("沉梦昂志");} @org.greenrobot.eventbus.Subscribe(sticky=true,threadMode = org.greenrobot.eventbus.ThreadMode.MAIN)public void receiveMainActivity(MessageEvent event){    String result=event.getMessage();    show.setText(result);}

分析问题

如果不仔细看代码的话,这样写的话感觉没问题。但是会出现一个问题,就是界面S的TextView一直不会更新,不会显示界面M发送的消息内容。其实问题就是在界面S,订阅消息事件的代码写错位置了,EventBus.getDefault().register(this);这句代码放在initView()之前,造成的结果就是界面的控件还未初始化,就接收消息了,界面无法更新UI,也就是TextView还未初始化。


解决问题

只需要把EventBus.getDefault().register(this)放在最后就行了。


@Override@org.greenrobot.eventbus.Subscribeprotected void onCreate(@Nullable Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_second);    initView();    EventBus.getDefault().register(this);}

更多相关文章

  1. Android代码内存优化建议-OnTrimMemory优化
  2. 在Android中销毁当前Fragment界面。
  3. Android -- 消息处理机制源码分析(Looper,Handler,Message)
  4. Gears Android WIFI/基站定位源代码分析
  5. 安卓学习(初)第三章(2)(《第一行代码》)
  6. 《第一行代码Android》阅读笔记
  7. 白话开发——Android Studio代码调试技巧篇
  8. Android,iOS打开手机QQ与指定用户聊天界面

随机推荐

  1. Android:属性scaleType与图片的显示
  2. Android(安卓)Studio Git初体验
  3. Android(安卓)Log系统详解
  4. 【Android游戏开发十六】Android(安卓)Ge
  5. Android最火的框架系列(三)JiaoZiVideoPlay
  6. Android单元测试最简单使用
  7. 【Android】消息机制应用
  8. Android之基于HTTP协议的通信详解
  9. Android之旅---广播(BroadCast)
  10. [置顶] Android调试工具之adbs