BroadcastRecevier(广播)
2015-10-19 10:47
169 查看
BroadcastRecevier(广播)
BroadcastRecevier:广播是Android平台中应用程序之间传输信息的一种机制。
主要负责接收系统或其他程序发出的广播。
BroastcastRecevier:是对广播进行过滤接受并响应的一类组件,是Android最重要的组件之一。
广播机制特点:
广播发送方不关心接收方是否接到数据
广播发送方不关心接收方如何处理数据
广播机制的组成要素:
Broastcast:广播、用于发送广播。
BroastcastRecevier:广播接受者,用于接收广播。
intent:意图,用于保存广播相关的信息。
Broastcast的类型:(两大类)
1、普通广播:完全异步,可以在同一时刻被所有接收者接收到。
优点:信息传递效率高
缺点:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播。
使用方式:Context.sendBroastcast();
2、有序广播:广播按照接收者声明的优先级别,被接收者一次接收广播。
特点:可以终止广播Intent的传播,一旦终止,后面的接收者无法接收;可以将数据传递给下一个接收者。
使用方式:Context.sendOrderBroastcastRecevier();
本地广播
系统广播
常见系统广播:
短信广播:android.provicer.Telephony.SMS_RECEVIED
开机启动广播:android.intent.action.BOOT_COMPLETED
电池电量广播:android.intent.action.BATTERY_CHANGED
拨打电话广播:android.intent.action.NEW_OUTGOING_GALL
电话状态广播:android.intent.action.PHONG_STATE
BroadcastRecevier使用过程中为什么会出现ANR?
BroadcastRecevier生命周期短,
onRecevier方法必须在10秒内完成。
解决方案:
将耗时工作通过Intent发送给Service,由Service进行处理。
Context.startService
使用步骤:
继承BroastcastRecevier
重写onRecevier
订阅广播(代码订阅,清单文件注册订阅)
代码订阅广播的写法:
第1步:继承BroastcastRecevier
第2步:重写onRecevier
public class MyBroastRecevier extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(BroastTestActivity.MY_ACTION)){
String data=intent.getStringExtra("data");
Toast.makeText(context,data,Toast.LENGTH_LONG).show();
}else{
String data=intent.getStringExtra("data");
Toast.makeText(context,data,Toast.LENGTH_LONG).show();
}
}
}
第3步:Activity中写
public static final String MY_ACTION = "com.example.lenovo.br";
Intent intent = new Intent();
intent.setAction(MY_ACTION);
intent.putExtra("data", "这是我自己发送的广播,测试一下而已");
this.sendBroadcast(intent);
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(recevier);
}
MY_ACTION :是自己定义的一个标识
第4步:清单文件中,注册recevier
<receiver android:name=".com.example.lenovo.myapp.recevier.MyBroastRecevier">
<intent-filter>
<action android:name="com.example.lenovo.br" />
</intent-filter>
</receiver>
清单文件注册订阅广播的写法
只需要上面的第4步不写
在Activity中onCreate()中添加下面代码即可。
private MyBroastRecevier recevier;
//注册Broadcast
recevier = new MyBroastRecevier();
IntentFilter filter = new IntentFilter();
filter.addAction(MY_ACTION_REGISTER);
registerReceiver(recevier, filter);
最好在清单文件中订阅广播,在Activity中写的话,广播就依附于Activity了,Activity关闭,就不能广播了。
BroadcastRecevier:广播是Android平台中应用程序之间传输信息的一种机制。
主要负责接收系统或其他程序发出的广播。
BroastcastRecevier:是对广播进行过滤接受并响应的一类组件,是Android最重要的组件之一。
广播机制特点:
广播发送方不关心接收方是否接到数据
广播发送方不关心接收方如何处理数据
广播机制的组成要素:
Broastcast:广播、用于发送广播。
BroastcastRecevier:广播接受者,用于接收广播。
intent:意图,用于保存广播相关的信息。
Broastcast的类型:(两大类)
1、普通广播:完全异步,可以在同一时刻被所有接收者接收到。
优点:信息传递效率高
缺点:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播。
使用方式:Context.sendBroastcast();
2、有序广播:广播按照接收者声明的优先级别,被接收者一次接收广播。
特点:可以终止广播Intent的传播,一旦终止,后面的接收者无法接收;可以将数据传递给下一个接收者。
使用方式:Context.sendOrderBroastcastRecevier();
本地广播
系统广播
常见系统广播:
短信广播:android.provicer.Telephony.SMS_RECEVIED
开机启动广播:android.intent.action.BOOT_COMPLETED
电池电量广播:android.intent.action.BATTERY_CHANGED
拨打电话广播:android.intent.action.NEW_OUTGOING_GALL
电话状态广播:android.intent.action.PHONG_STATE
BroadcastRecevier使用过程中为什么会出现ANR?
BroadcastRecevier生命周期短,
onRecevier方法必须在10秒内完成。
解决方案:
将耗时工作通过Intent发送给Service,由Service进行处理。
Context.startService
使用步骤:
继承BroastcastRecevier
重写onRecevier
订阅广播(代码订阅,清单文件注册订阅)
代码订阅广播的写法:
第1步:继承BroastcastRecevier
第2步:重写onRecevier
public class MyBroastRecevier extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(BroastTestActivity.MY_ACTION)){
String data=intent.getStringExtra("data");
Toast.makeText(context,data,Toast.LENGTH_LONG).show();
}else{
String data=intent.getStringExtra("data");
Toast.makeText(context,data,Toast.LENGTH_LONG).show();
}
}
}
第3步:Activity中写
public static final String MY_ACTION = "com.example.lenovo.br";
Intent intent = new Intent();
intent.setAction(MY_ACTION);
intent.putExtra("data", "这是我自己发送的广播,测试一下而已");
this.sendBroadcast(intent);
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(recevier);
}
MY_ACTION :是自己定义的一个标识
第4步:清单文件中,注册recevier
<receiver android:name=".com.example.lenovo.myapp.recevier.MyBroastRecevier">
<intent-filter>
<action android:name="com.example.lenovo.br" />
</intent-filter>
</receiver>
清单文件注册订阅广播的写法
只需要上面的第4步不写
在Activity中onCreate()中添加下面代码即可。
private MyBroastRecevier recevier;
//注册Broadcast
recevier = new MyBroastRecevier();
IntentFilter filter = new IntentFilter();
filter.addAction(MY_ACTION_REGISTER);
registerReceiver(recevier, filter);
最好在清单文件中订阅广播,在Activity中写的话,广播就依附于Activity了,Activity关闭,就不能广播了。
相关文章推荐
- 《TCP/IP详解 卷一》读书笔记-----UDP&IP 分片
- TCP/IP负载均衡
- 一分钟了解互联网数据挖掘流程
- 二、线程相关类ThreadLocal
- 百度地图自动定位
- 学Android---Intent
- iOS app上线加急 审核加急
- [iOS]Reason: image not found 解决办法
- nVivo highlight code中的文本
- xcode6.4 资源国际化 ->本地化
- Android异步消息处理机制完全解析
- mysql 主从配置
- 实战 Lucene,第 1 部分: 初识 Lucene
- SwipeRefreshLayout 进入页面主动刷新
- iOS—懒加载模式
- activity传递数据
- RAC 的一些概念性和原理性的知识(转)
- Coursera_Stanford_ML_ex5_正则多项式回归和误差分析 作业记录
- traceview进行Android性能测试
- Lucene简介