Android 三种跨界面的通讯方式

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

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android 中,登录界面的跳转实现原理一般是通过 Intent 对象实现的。Intent 是 Android 中用于组件通信的一种机制,可以用于启动 Activity、Service、BroadcastReceiver 等组件。 在登录界面中,通常会有一个登录按钮,当用户点击登录按钮时,会触发登录事件,这时就需要使用 Intent 对象跳转到登录成功后的界面。具体实现步骤如下: 1. 在登录界面中创建一个 Intent 对象,并指定目标界面的类名。 ```java Intent intent = new Intent(LoginActivity.this, MainActivity.class); ``` 其中,LoginActivity.this 表示当前界面的上下文,MainActivity.class 表示要跳转的目标界面。 2. 如果需要在跳转目标界面时传递参数,可以使用 putExtra() 方法设置参数值。 ```java intent.putExtra("username", username); intent.putExtra("password", password); ``` 其中,"username" 和 "password" 表示要传递的参数名,username 和 password 表示要传递的参数值。 3. 调用 startActivity() 方法启动目标界面。 ```java startActivity(intent); ``` 这时,就会跳转到 MainActivity 界面,并且可以在该界面的 onCreate() 方法中使用 getIntent() 方法获取传递的参数值。 ```java Intent intent = getIntent(); String username = intent.getStringExtra("username"); String password = intent.getStringExtra("password"); ``` 总之,通过 Intent 对象实现界面跳转是 Android 中常用的一种方式,具有简单、灵活、可扩展性强等优点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值