Android 编程下两种方式注册广播的区别
2015-07-17 20:21
771 查看
常驻型广播
常驻型广播,当你的应用程序关闭了,如果有广播信息来,你写的广播接收器同样的能接收到,它的注册方式就是在你应用程序的AndroidManifast.xml 中进行注册,这种注册方式通常又被称作静态注册。这种方式可以理解为通过清单文件注册的广播是交给操作系统去处理的。示例代码如下:
非常驻型广播
非常驻型广播,当应用程序结束了,广播自然就没有了,比如在 Activity 中的 onCreate 或者 onResume 中注册广播接收者,在 onDestory 中注销广播接收者。这样你的广播接收者就一个非常驻型的了,这种注册方式也叫动态注册。这种方式可以理解为通过代码注册的广播是和注册者关联在一起的。比如写一个监听 SDcard
状态的广播接收者:
另外简单介绍下普通广播(Normal Broadcast)和有序广播(Ordered Broadcast):
普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。
有序广播比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播。
常驻型广播,当你的应用程序关闭了,如果有广播信息来,你写的广播接收器同样的能接收到,它的注册方式就是在你应用程序的AndroidManifast.xml 中进行注册,这种注册方式通常又被称作静态注册。这种方式可以理解为通过清单文件注册的广播是交给操作系统去处理的。示例代码如下:
<!-- 订阅开机结束广播 --> <receiver android:name=".receiver.BootCompleteReceiver" > <intent-filter android:priority="1000" > <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
非常驻型广播
非常驻型广播,当应用程序结束了,广播自然就没有了,比如在 Activity 中的 onCreate 或者 onResume 中注册广播接收者,在 onDestory 中注销广播接收者。这样你的广播接收者就一个非常驻型的了,这种注册方式也叫动态注册。这种方式可以理解为通过代码注册的广播是和注册者关联在一起的。比如写一个监听 SDcard
状态的广播接收者:
package cn.sunzn.mosecurity.activity; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.os.Environment; public class SDcard extends Activity { SdcardStateChanageReceiver sdcardStateReceiver; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sdcardStateReceiver = new SdcardStateChanageReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_MEDIA_REMOVED); filter.addAction(Intent.ACTION_MEDIA_EJECT); filter.addAction(Intent.ACTION_MEDIA_MOUNTED); filter.addDataScheme("file"); registerReceiver(sdcardStateReceiver, filter); } protected void onDestroy() { unregisterReceiver(sdcardStateReceiver); } class SdcardStateChanageReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { checkSDCard(); } public void checkSDCard() { String state = Environment.getExternalStorageState(); System.out.println(state); if (state.equals(Environment.MEDIA_REMOVED) || state.equals(Environment.MEDIA_UNMOUNTED)) { System.out.println("SDCard 已卸载!"); } } } }
另外简单介绍下普通广播(Normal Broadcast)和有序广播(Ordered Broadcast):
普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。
有序广播比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播。
相关文章推荐
- android中加载大图片到内存中
- 三行代码接入,社交软件打字时底下弹出的表情布局,自定义ViewPager+页面点标+各种功能的android小框架。
- Android大图片裁剪终极解决方案-原理分析【推荐】
- Android MediaScannerJNI源码详解
- 获取系统时间,每一秒钟更新一次
- 【资源NotFoundException美元:# 0 x55字符串资源】Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x55
- Android HandlerThread 源码分析
- Android手机截屏
- .Net程序猿乐Android发展---(10)框架布局FrameLayout
- 关于建立Android工程R文件丢失的问题
- 【已解决】Android中xml中TextView引用已定义好的样式时出错:android.view.InflateException: Binary XML file line #14: Error
- android文档记载
- 关于建立Android工程R文件丢失的问题
- Android view lifecycle[转载]
- android简单的计算器
- Android 修改屏幕默认的亮度值
- (4.1.2.5)Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案
- (4.1.8.7)Android Fragment 你应该知道的一切
- 在Android程序中使用已有的SQLite数据库
- Android帮助文档打开慢的解决方法