android中LocalBroadcastManager的使用
今天遇到一个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的使用的更多相关文章
- Android 中LocalBroadcastManager的使用方式
Android 中LocalBroadcastManager的使用方式 在android-support-v4.jar中引入了LocalBroadcastManager,称为局部通知管理器,这种通知的 ...
- (转)Android 中LocalBroadcastManager的使用方式
发表于2个月前(2014-11-03 22:05) 阅读(37) | 评论(0) 0人收藏此文章, 我要收藏 赞0 1月10日 #长沙# OSC 源创会第32期开始报名 摘要 android中广播 ...
- Android 中的消息传递,详解广播机制
--------------------------------------广播机制简介--------------------------------------------- Android中的广 ...
- Android中的广播
Android中的广播 广播接受器,可以比喻成收音机.而广播则可以看成电台. Android系统内部相当于已经有一个电台 定义了好多的广播事件,比如外拨电话 短信到来 sd卡状态 电池电量变化... ...
- android中实现本地广播
上一篇文章实现了自定义广播: android中实现自定义广播 自定义广播允许被其他应用使用,有些情况下只允许广播在本应用范围内使用,可以用本地广播的方式实现 下面是实现的代码部分,MainActivi ...
- Android 中的广播机制
Android 中的广播机制 Android 中的广播,按照广播响应范围,可以分为应用内广播和全局广播.按照广播的接收方式,可以分为标准广播和有序广播. 广播的分类 响应范围 应用内广播:此类广播只能 ...
- Android中的LinearLayout布局
LinearLayout : 线性布局 在一般情况下,当有很多控件需要在一个界面列出来时,我们就可以使用线性布局(LinearLayout)了, 线性布局是按照垂直方向(vertical)或水平方向 ...
- Android中BroadcastReceiver的两种注册方式(静态和动态)详解
今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...
- Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)
之前的博文<Android中使用ExpandableListView实现好友分组>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的仿微信 ...
随机推荐
- CSS的常用属性(一)
文本属性 font-size: 16px 文字大小 font-weight: 700 文字粗细 值从100-900 (值为700看上去加粗了) 不推荐使用font-weight: bold font- ...
- Python3爬虫----爬取网页内的图片
无聊把公司内网爬了一遍. https://github.com/gig886/Python/tree/master/爬虫
- Eigen与Matlab语法及语义辞典
Eigen为Matlab转换为C++提供了一个简单的语法级别的代码迁移工具. 对一些代码进行了扩充,以便程序由Matlab到Eigen的移植................... 参考链接:http: ...
- [转]使用Fiddler进行iOS APP的HTTP/HTTPS抓包
Fiddler不但能截获各种浏览器发出的HTTP请求, 也可以截获各种智能手机发出的HTTP/HTTPS请求.Fiddler能捕获iOS设备发出的请求,比如IPhone, IPad, MacBook. ...
- Docker系列之入门
Docker基本介绍 一.什么是Docker 在docker的官方之什么是docker中提到了一句话:“当今各大组织或者团体的创新都源于软件(例如OA.ERP等),其实很多公司都是软件公司" ...
- Day 17 time,datetime,random,os,sys,json,pickle
time模块 1.作用:打印时间,需要时间的地方,暂停程序的功能 时间戳形式 time.time() # 1560129555.4663873(python中从1970年开始计算过去了多少秒) 格式化 ...
- BZOJ4756 [USACO17JAN]Promotion Counting晋升者计数
Description The cows have once again tried to form a startup company, failing to remember from past ...
- windows开机自启动bat脚本设置
群里有朋友问到windows下如何设计开机自启动的脚本,一般而言小鱼大多还是在linux环境下运维,windows的bat了解的很少,windows运行机制也不是特别了解,不过既然朋友问到这个问题,虽 ...
- GDI 画笔(9)
使用现有画笔 Windows 提供三种备用画笔(Stock Pen):BLACK_PEN(黑色画笔).WHITE_PEN(白色画笔).NULL_PEN(不绘制任何图形的画笔). 调用 GetStock ...
- Wireshark 如何捕获网络流量数据包
转自:http://www.4hou.com/web/7465.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutia ...