今天遇到一个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. 【Python】循环语句

    while循环 当条件成立时,循环体的内容可以一直执行,但是避免死循环,需要有一个跳出循环的条件才行. for循环 遍历任何序列(列表和字符串)中的每一个元素 >>> a = [&q ...

  2. SnackDown Online Qualifier 2017

    好久没做题了,然后就想着随便做一个.无奈cf都是晚上,然后就看见这个,随便做做. 资格赛,只要做出来1题就行了,4天的时间. 1. 水题 #include <iostream> #incl ...

  3. org.apache.catalina.core.StandardContext startInternal SEVERE: Error listenerStart

    问题:文件明明存在,资源找不到,报错 解决方法:原因是没有build path,这有点像.net里边的build .点击相应的文件夹选择build path ,解决问题

  4. create-react-app 引入ant design 及 使用 less

    全局引入: 第一步:全局安装 create-react-app npm install create-react-app -g 第二步:安装 yarn npm install -g yarn 第三步: ...

  5. 三星A3、A5、A7、G7、J5、J7、S6系列等新机型的部分手机解锁 ROOT刷机

    三星A3.A5.A7.G7.J5.J7.S6系列等新机型的部分手机,三星官方加了限制,需要解锁后才能刷机如果没有解锁,刷第三方recovery或者刷非官方原版固件,都会刷不进,手机跳转到提示界面,显示 ...

  6. jQuery+pjax简单示例汇总

    pjax 是一个jQuery插件,它使用 ajax 和 pushState 来实现快速的浏览体验,包括真正的固定链接,页面标题和工作返回按钮. ajax缺点是破坏了浏览器的前进后退,因为ajax的请求 ...

  7. C# 前一个数是后一个数的父级

    private void button2_Click(object sender, EventArgs e) { var str = "1 2 3 4 5 6 7 8 9 10 11 12 ...

  8. 用了那么多项目管理工具,还是CORNERSTONE这款最好用

    在与软件开发有关的项目,往往会出现很难管理情况.许多事情都需提前计划.控制与管理,所以许多项目经理很容易迷失在计划的过程中.幸运的是,市场上提供了各种各样的项目管理工具.但不幸的是,工具实在是太多了. ...

  9. Java+selenium+Firefox/ IE/ Chrome主流浏览器自动化环境搭建

    一.java+selenium+firefox 1.环境准备:JDK1.8 2.安装firefox浏览器v59 3.下载驱动:https://github.com/mozilla/geckodrive ...

  10. BRAFT EDITOR富文本编辑器

    https://braft.margox.cn/demos/basic     官方文档 import React from 'react' import Uploading from '../Upl ...