Android-BroadcastReceiver
一 引入原因
1,在系统内通知和判定执行状态:开机了, TF卡插拔, 关机了
2,自定义执行状态:发消息提醒更新界面
二 接收哪些消息
1,常规消息
Normal broadcast,通过Content.sendBroadcast发送
2,排序消息
Ordered broadcast,通过Content.sendOlderedBroadcast发送
三 如何接收系统级的消息
1,继承BroadcastReceiver类重写一个类
2,重载onReceive回调方法,在主线程中实现,接收消息执行的时间必须小于10s(避免ANR),
如果接受操作比较复杂,就需要开启子线程
3,配置manifest文件权限,和
四 黏性的有序广播
广播是具有黏性的,与广播相关联的intent在广播完成后依然存在。
要发送具有黏性的有序广播,使用Content类的sendStickyOrderedBroadcast()方法
五 注册广播接收器
1,动态注册
在Activity中动态注册
在onResume()方法中调用registerReceiver()方法
在onPause()方法中调用unregisterReceiver()方法
2,静态注册
在manifest文件静态注册
<receiver android:name=".MyBroadcastReceiver">
<intent-filter android:priority="10">//优先级
<action android:name="com.chengzhi.action"/>
</intent-filter>
</receiver>
六 注意
1,在intent-filter中设置黏性广播的优先级android:priority=”10”,数值大的优先
系统消息是排序广播,优先级一般为负数
2,在onReceiver中可以退出广播abortBroadcast()
3,四大组件都需要需要在manifest文件中注册
4,系统启动的时候启动服务如何实现
接收系统消息,在回调onReceive方法中开启服务
5,同步与异步
同步,需要一步一步执行
异步,同时执行,发送消息
6,BroadcastReceiver宿主进程生命周期:
receiver到信息后会启动宿主进程,当返回后
如果没有其他交互,宿主进程状态变为空进程,因此如果要长期运行宿主进程
就startService
7,为何receiver接收到消息就会启动相应的进程:
在安装时放入系统哈希(根据intent排列)链表里面,
消息管理在分发的时候就在链表里面寻找所要分发的进程,然后启动它
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/qq_22075977/article/details/46722729