今天遇到一个acitivity之间通信的问题,因为我们是用TabActivity包裹了Activity(我们称之为A)。所以这两个Activity是同一时候存在的。当在TabActivity中启动其它Activity处理一些业务,当业务处理完毕时,通过onActivityResult()返回处理结果,我们须要依据返回的结果对A进行更新。可是如今问题就来了。我们怎么来更新A呢?

我发现TabActivity的onActivityResult()是在A的onResume之前运行的,也就是说,我能够在TabActivity里做一些处理,在A运行onResume的时候来更新状态,我首先想到的是通过SharedPreference。通过写一个标识,让A来读取这个标识。

可是这样的方式显然不能让我们惬意,通过写文件来传递状态并非非常好的做法。

或者。我们能够通过广播的形式来传递状态,可是广播的操作太重。作为一个app,不应该做这样的系统级的操作,并且系统级的广播还会带来安全问题。一旦被其它应用捕获就有可能被利用。

最后,从同事那里了解到有这么个东西,能够帮我们解决问题:LocalBroadcastManager。

它来自android 的support包。类名是android.support.v4.content.LocalBroadcastManager。是用来在同一个应用内的不同组件间发送Broadcast的,刚好与我们的场景相符合。同一时候。它发送的广播仅仅在app内传播,不会泄漏到其它的应用,安全性也有了保证。并且它的使用方式非常easy,与普通的广播类似。

使用方式例如以下,在接收方也就是我们的A,这样调用。

​    ​       BroadcastReceiver cameraPicBroadcastReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Contextcontext, Intent intent) {

boolean isSuccess=intent.getExtras().getBoolean(MConstants.KEY_LOGIN_SUCESS);

​    ​    ​    ​    ​    ​.......//更新状态

}

};

IntentFilter intentFilter = new IntentFilter( MConstants.KEY_INTENT_LOGIN_RESULT);

final LocalBroadcastManager  localBroadcastManager = LocalBroadcastManager.getInstance(ctx);

localBroadcastManager.registerReceiver(cameraPicBroadcastReceiver, intentFilter);

广播的发送方的写法例如以下:

​    ​    ​    ​    ​ Intent   loginSucessIntent = new Intent();

loginSucessIntent.setAction(MConstants.KEY_INTENT_LOGIN_RESULT);

loginSucessIntent.putExtra(MConstants.KEY_LOGIN_SUCESS, false);

LocalBroadcastManager.getInstance(context).sendBroadcast(loginSucessIntent);

LocalBroadcastManager是单例的,使用方式非常easy,它还能够解决Service和Activity的交互问题。

android中LocalBroadcastManager的使用的更多相关文章

  1. Android 中LocalBroadcastManager的使用方式

    Android 中LocalBroadcastManager的使用方式 在android-support-v4.jar中引入了LocalBroadcastManager,称为局部通知管理器,这种通知的 ...

  2. (转)Android 中LocalBroadcastManager的使用方式

    发表于2个月前(2014-11-03 22:05)   阅读(37) | 评论(0) 0人收藏此文章, 我要收藏 赞0 1月10日 #长沙# OSC 源创会第32期开始报名 摘要 android中广播 ...

  3. Android 中的消息传递,详解广播机制

    --------------------------------------广播机制简介--------------------------------------------- Android中的广 ...

  4. Android中的广播

    Android中的广播 广播接受器,可以比喻成收音机.而广播则可以看成电台. Android系统内部相当于已经有一个电台 定义了好多的广播事件,比如外拨电话 短信到来 sd卡状态 电池电量变化... ...

  5. android中实现本地广播

    上一篇文章实现了自定义广播: android中实现自定义广播 自定义广播允许被其他应用使用,有些情况下只允许广播在本应用范围内使用,可以用本地广播的方式实现 下面是实现的代码部分,MainActivi ...

  6. Android 中的广播机制

    Android 中的广播机制 Android 中的广播,按照广播响应范围,可以分为应用内广播和全局广播.按照广播的接收方式,可以分为标准广播和有序广播. 广播的分类 响应范围 应用内广播:此类广播只能 ...

  7. Android中的LinearLayout布局

    LinearLayout : 线性布局 在一般情况下,当有很多控件需要在一个界面列出来时,我们就可以使用线性布局(LinearLayout)了,  线性布局是按照垂直方向(vertical)或水平方向 ...

  8. Android中BroadcastReceiver的两种注册方式(静态和动态)详解

    今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...

  9. Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)

    之前的博文<Android中使用ExpandableListView实现好友分组>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的仿微信 ...

随机推荐

  1. ArrayList 扩容原理

    面试中经常问到的问题之一就是List的扩容机制了,他是怎么做到扩容的,大家都能答出来底层是数组,复制一个数组来扩容,但是再具体一点来说,大家就不知道该怎么说了,如果不看源码说这么多确实就差不多了,但是 ...

  2. Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook解决方法

    有时候电脑中进行Java -version相关的操作时,会出现Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook提示信息,尽管这些提示信息不影响JDK的正常使 ...

  3. 使用jquery通过AJAX请求方式,后台返回了当前整个HTML页面代码

    该结果分为多种情况: 1.当前项目使用了interceptor/filter,拦截或者过滤了特定请求. 2.在HTML页面使用了表单提交,没有对表单的“onsubmit”事件做return false ...

  4. javascript事件绑定1-模拟jquery可爱的东西

    1.给对象添加事件attachEvent(兼容IE,不兼容ff.chrome) <html xmlns="http://www.w3.org/1999/xhtml"> ...

  5. ThinkPHP3.2.3对数据的添、删、改、查(CURD)

    对数据的添加: public function form() { parent::common(); $obj = D('Leave'); if (IS_POST) { $data = I('post ...

  6. 阿里巴巴矢量库IconFont__使用小录

    使用阿里巴巴矢量库方法虽然不难,但本人记性不好,遂在次记录几笔 阿里巴巴矢量库地址:http://www.iconfont.cn/plus 阿里巴巴矢量库图标好处: 1:图标矢量化 2:自己总结:ic ...

  7. C# 遍历文本框

    #region 文本框指定位置加入回车符 private void button1_Click(object sender, EventArgs e) { #region // 查询首字母位置 //s ...

  8. logging模块-logging.basicConfig、logger.setLevel、handler.setLevel优先级

    logging.basicConfig < handler.setLevel < logger.setLevel 1.脚本中没有配置logger.setLevel会使用handler.se ...

  9. 卸载pycharm再重新安装后,找不到第三方库

    遇到的问题: 看到pycharm出了新的版本,手痒把旧的版本卸载,然后安装了最新的版本,然后问题就来了. 之前通过PIP命令安装的第三方库,import的时候都报错,找不到模块.既然以前能正常使用,现 ...

  10. Having子句用法

    Having基础用法 集合结果指定条件 注:HAVING子句中能够使用三种要素:常数,聚合函数,GROUP BY子句中指定的列名(聚合建) HAVING子句: 用having就一定要和group by ...