Android四大组件之一——广播
2016-06-21 00:00
447 查看
BroadCastReceiverwhat?(是什么)广播接收器是一个专注于接收广播通知信息,并作出对应处理的组件。how?(怎么使用)你的应用可以使用它对外部应用过滤,只对感兴趣的外部事件进行处理和反应。静态注册:在清单文件下:
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
动态注册,在代码中
IntentFilter intent = new intentFilter();
intent.addAction(String);
registterReceiver(BrodCastReceiver,intentfilter);//第一个参数可以是自定义的广播。
一般:在onStart中注册,onStop中取消unregisterReceiver 指定广播目标Action:Intent intent = new Intent(actionString); 并且可通过Intent携带消息 :intent.putExtra("msg", "hello,我通过广播发送消息了");
廣播的發送有:
普通廣播:通过Context.sendBroadcast来发送,由Intent来传递注册时用到的Action。
context.sendBrodCast(intent);
有序廣播:通過Context.SendBroadCast();來發送。
context.sendBroadCast(intent,receiverpermission);//第二個參數是優先級,範圍在-1000 ----1000之間所谓有序,就是每个receiver执行后可以传播到下一个receiver,也可以完全中止传播——不传播给其他receiver。 而receiver运行的顺序可以通过matched intent-filter 里面的android:priority来控制,当priority优先级相同的时候,Receiver以任意的顺序运行。when?(何时使用)例如:电量低---ACTION_BATTERY_LOW,ACTION_TIME_CHANGED(系统时间改变时触发),需要注意的是,如果需要完成一次耗時的操作,時間超過10秒的。就通過發送intent給service,不能使用工作線程來操作why?{為什麼)1它生命周期只有十秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报ANR(Application No Response) 程序无响应的错误信息,如果需要完成一项比较耗时的工作 , 应该通过发送 Intent 给 Service, 由Service 来完成 . 这里不能使用子线程来解决 , 因为 BroadcastReceiver 的生命周期很短 , 子线程可能还没有结束BroadcastReceiver 就先结束了 .BroadcastReceiver 一旦结束 , 此时 BroadcastReceiver的所在进程很容易在系统需要内存时被优先杀死 , 因为它属于空进程 ( 没有任何活动组件的进程 ). 如果它的宿主进程被杀死 , 那么正在工作的子线程也会被杀死 . 所以采用子线程来解决是不可靠的2. 动态注册广播接收器还有一个特点,就是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用系统常见广播Intent,如开机启动、电池电量变化、时间改变等广播
相关文章推荐
- android gradle 问题汇总02
- Android 监听Fragment返回键的方式之一
- Android 混淆 ProGuard
- Android SeekBar的使用(待续)
- Android:原型设计
- Android:Activity的生命周期和启动方式
- Android公共title的应用
- Android官方Media Playback中文教程
- RxJava zip操作符在Android中的实际使用场景
- Android Studio中的六种依赖关系
- Android的布局复用与优化
- MediaPlayer基础-生命周期状态分析
- Android 中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()解析
- android设置按钮按下的不同效果图
- Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE
- Android数据存储
- Android学习之Drawelayout
- hjr-Android:创建Android工程
- 获取android系统中已安装程序的信息
- 015.ViewRoot和DecorView