安卓中的Eventbus

安卓中的eventbus,可以代替消息机制,广播,对线程的处理更加明确

将eventbus包拷贝到安卓的lib中,再导入库,就可以使用了在Oncreat中去注册,Ondestory中注销

package com.lyj.eventbus;

import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;

import org.greenrobot.eventbus.EventBus;import org.greenrobot.eventbus.Subscribe;import org.greenrobot.eventbus.ThreadMode;

public class MainActivity extends AppCompatActivity {

    private TextView textView;    private Button button;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        EventBus.getDefault().register(this);        textView= (TextView) findViewById(R.id.textview);        button= (Button) findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener(){            @Override            public void onClick(View v) {            //发送对象,或者数据                EventBus.getDefault().post("info");                //异步任务,子线程//                new Thread(new Runnable() {//                    @Override//                    public void run() {//                        //网络操作//                        //使用事件总线发布一个事件:字符串//                        EventBus.getDefault().post("info");//                    }//                })//                .start();            }        });    }

    /**     * 订阅事件(默认从哪个位置发就在哪个位置接收)     * @param info     */    @Subscribe(threadMode = ThreadMode.MAIN)    public void showInfo(String info){        textView.setText(info);    }

    /**     * 所有的都能收到,但发送的是Info类型的时候,才接收到     * @param info     */    @Subscribe(threadMode = ThreadMode.MAIN)    public void showInfo2(String info){        Log.d("TAG","showInfo2+>>>>>>"+Thread.currentThread().getName());    }

    /**     * 若主线程发布,就启动子线程执行该方法     * 若子线程发布,就在该子线程执行     * @param info     */    @Subscribe(threadMode = ThreadMode.BACKGROUND)    public void showInfo3(String info){        Log.d("TAG","showInfo3+>>>>>>"+Thread.currentThread().getName());    }

    /**     * 在新的线程执行该方法     * @param info     */    @Subscribe(threadMode = ThreadMode.ASYNC)    public void showInfo4(String info){        Log.d("TAG","showInfo4+>>>>>>"+Thread.currentThread().getName());    }

    /**     * 在发布的线程里执行该方法     * @param info     */    @Subscribe(threadMode = ThreadMode.POSTING)    public void showInfo5(String info){        Log.d("TAG","showInfo5+>>>>>>"+Thread.currentThread().getName());    }    class Info{

    }    @Override    protected void onDestroy() {        super.onDestroy();        EventBus.getDefault().unregister(this);    }}
时间: 2024-11-03 03:45:36

安卓中的Eventbus的相关文章

安卓中的数据存储方式以及ContentProvider的简单介绍

1.介绍android的数据存储方式 File存储 sharedPrefrence存储方式 conmtentprovider sqlitedatabase 网络存储 2.请介绍下ContentProvider是如何实现数据共享的 安卓中如果想将自己应用程序的数据暴露给其他的应用程序的时候就需要创建内容提供者.第三方可以通过contentResolver来访问该provider 3.为什么要使用ContentProvider?它和sql的实现上有什么差别? ContentProvider屏蔽了数据

项目中应用eventbus解决的问题

在项目开发过程中,往往有些功能表面看起来简单,但实际开发的结果非常复杂,仔细分析下原因发现很多都是因为附加了许多的额外功能. 真的简单吗? 比如我们对一个电商平台的商品数据做修改的功能来讲,其实非常简单,无非就是运营人员在管理平台中对商品进行修改数据,然后点击提交,核心功能的确很简单,但可能有人会要求对商品的修改都需要增加操作日志,还有人提出需要在商品数据修改后自动去更新检索系统中的数据,有人提要在商品数据修改后需要经过审核人的审核才能生效,还有人提需要给运营人员发邮件通知等等,如此一来这个商品

安卓中的内存泄漏

因为安卓是基于java语言的,所以我们先来看一看java中的内存泄漏,然后在此基础上来谈谈安卓中的内存泄漏. 一java中的内存泄漏: java中的内存泄漏主要是指在堆中分配的内存,明明已经不需要的时候,还仍然保留着访问它的引用,导致GC回收不能及时回收(关于GC回收不做过多赘述),导致这种情况出现的最主要原因是长生命周期的对象持有短生命周期对象的引用,导致短生命周期的对象明明已经不需要却无法被GC回收,从而导致内存泄漏.主要包括以下几种情况: 1在一个类中创建了一个非静态内部类的静态实例,如下

安卓中Service详解

service(服务)是安卓中的四大组件之一,它通常用作在后台处理耗时的逻辑,与Activity一样,它存在自己的生命周期,也需要在清单文件中配置相关信息,本博客将对Service的各个知识点进行详细讲解. 一Service的基本用法: 1使用本地服务 1)服务的启动方式 1通过Context的startService()方法启动服务:以该方法启动的服务,开启该服务的应用组件(如Activity)与该Service不存在关联关系,即使开启该服务的Activity被销毁,Service任能够一直在

安卓中使用全局变量getApplicationContext

定义一个用户信息类 /**Title: 用户登录信息 * @author Java Development Group * @version 3.0 */ public class gf_ControlUserinfo extends Application { ...省略 } 在中配置全局声明 <application android:allowBackup="true" android:icon="@drawable/ic_launcher" androi

解决安卓中页脚被输入法顶起的有关问题

解决安卓中页脚被输入法顶起的问题 在实际开发中,我们对页脚有两种要求:让其固定在底部或者被输入法托起.下面来看看这两种问题的解决办法 问题截图: 1.让页脚固定在底部(无论是否出现输入法) 解决办法:设置软键盘的输入模式:用窗体管理器设置布局参数为自动调整 方法一:java代码中实现:在你的activity中的oncreate中setContentView之前写上这个代码getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_IN

安卓中实现界面数据懒加载

大家在使用手机新闻客户端的时候就会有一个发现,大多数的新闻客户端都会把新闻分类,诸如头条.娱乐.体育.科技等等,如何实现这种界面的呢?这个实现起来其实很简单,就是在一个Fragment中实现多个ViewPage的切换,再在ViewPage的上面放一个TabLayout,关联起来就可以实现联动效果.如果大家感觉不太明了的话,以后我可以专门写一篇关于Fragment中放入多个ViewPage的博客,今天,我主要介绍的是怎样实现界面即Fragment的懒加载.那么,大家就会奇怪了既然是加载界面直接加载

安卓中的事件分发机制源码解析

安卓中的事件分发机制主要涉及到两类控件,一类是容器类控件ViewGroup,如常用的布局控件,另一类是显示类控件,即该控件中不能用来容纳其它控件,它只能用来显示一些资源内容,如Button,ImageView等控件.暂且称前一类控件为ViewGroup类控件(尽管ViewGroup本身也是一个View),后者为View类控件. 安卓中的事件分发机制主要涉及到dispatchTouchEvent(MotionEvent ev).onInterceptTouchEvent(MotionEvent e

Rafy中的EventBus

EventBus主要是干嘛使的,直接翻译叫事件总线. 是观察者模型的实现,利用它你既可以实现观察者模型的业务场景,还可以基于它的事件驱动机制来实现应用程序内组件之间的解耦与通信. 我们来看看有EventBus的总线结构图,如下: Rafy中的EventBus使用入口是基于上图中Composer组件组合器,使用的时候都是 通过 操作 Composer.EventBus 来控制事件的注册与发布. 所以Composer起到了桥梁的作用,通过它外界可以操作EventBus,那么EventBus是什么呢