Android 三种跨界面的通讯方式

来源:互联网 发布:c语言产生0 9的随机数 编辑:程序博客网 时间:2024/05/01 18:58

在咱们安卓开发的过程中,我们常常会遇到某个界面的东西变动了,而需要通知另外一个界面或者数据共享后某处改动了共享数据,而需要通知其它引用了的地方更新,所以今天我就来介绍一下适用这种需求的三种方式:

1.       本地广播

2.       EventBus

3.       ContentObserver(内容观察者)

1.本地广播
  注意了,这里的使用的是本地广播LocalBroadcastManager,而不是我们一般使用的那种可以在manifest里注册的那个BroadcastReceiver ,之所以推荐使用本地广播,是因为他只在本应用程序内传递消息,这样可以某种程序上保证传递消息的安全性,相对于那种普通广播来讲,本地广播也没有那么耗资源和费电。
 本地广播的代码很简单,分三步
第一步 注册本地广播:
//获取实例
LocalBroadcastManager localBroadcastManager=LocalBroadcastManager.getInstance(this);
IntentFilter intentFilter=new IntentFilter("com.example.localbroadcast");
//注册本地广播监听器
//这里使用到的,可以使用成员变量
localBroadcastManager.registerReceiver(new BroadcastReceiver() {
 @Override
 public void onReceive(Context context, Intent intent) {
    //做你想做的东西
 }
}, intentFilter);
第二步 发送广播
LocalBroadcastManager localBroadcastManager= LocalBroadcastManager.getInstance(context);
Intent intent=new Intent("com.example.localbroadcast ");//这里要与上面注册的要一样
intent.putExtra("data",msg);//发送数据
localBroadcastManager.sendBroadcast(intent);//发送本地广播
 
第三步 注销广播
当我们不再使用,或者在使用界面被销毁时,我们要把注册了的广播注销掉
if(null!=localBroadcastManager){//这里使用到的,可以使用成员变量
    localBroadcastManager.unregisterReceiver(msgLocalBReceiver);
}

2.EventBus的使用

首先要去https://github.com/greenrobot/EventBus,这个地方下载一个源码,然后加入到你的项目中,为了方便,建议把关键代码打成jar再导入到项目中

使用EventBus也分成三步:

第一步注册

在你所要注册的Activity或者Fragment等类中注册EventBus.getDefault().register(this);

并实现一个方法:

public void onEvent(EventTypeeventType){

   //做你想做的东西

}

第二步,在你想通知别人的地方,发送:

EventBus.getDefault().post(newEventType(你想传的数据对象, 你想传的数据类型));

第三步,注销:

EventBus.getDefault().unregister(this);//这个一般和步骤一是同一个类,写在onDestroy类似的函数里。

 

3.ContentObserver(内容观察者)

这个常用于数据库的某表的变动了,通知各个引用了此表的地方更新,它也有三步

第一步:注册(此例子我在activity里面写的)

ExampleContentObserver exampleContentObserver=new ExampleContentObserver (new Handler())

getContentResolver().registerContentObserver(Uri.parse("content://com.example.provider.myprovider/”),true, exampleContentObserver);

使用到的类:

class ExampleContentObserver extendsContentObserver{

 

           publicExampleContentObserver(Handler handler) {

                    super(handler);

           }

           @Override

           publicvoid onChange(boolean selfChange) {

                    //发handler通知或者做自己想做的事

           }

}

第二步发送

context.getContentResolver().notifyChange(Uri.parse("content://com.example.provider.myprovider/”),null);

   第三步注销第一步注册的

getContentResolver().unregisterContentObserver(exampleContentObserver);

 

这三种方式我本人都使用过,都非常好用,各有千秋,只有兄弟们自己去体会哪种好用,就选择哪种为自己服务,上面只贴出来的是代码的样子,我没有怎么专门写一个demo,如果有兄弟,还是觉得看不懂,可以在下面回复,如果比较多兄弟,要源代码或者demo的话,我会再抽出点时间来写一个,谢谢大家。

 

1 0
原创粉丝点击