Android 四大组件基础知识(二)broadcast:

broadcast:

1、简介

broadcast是android四大组件之一,主要用于在应用程序之间进行通讯。而broadcastReceiver是对发送出来的broadcast进行过滤和处理的一种组件。

2、broadcast注册方式

①静态注册:就是在清单文件中进行注册,和Activity注册类似。代码如下:

[html] view plain copy
  1. <receiver  
  2.           android:name=".module.base.MyReceiver"  
  3.           android:enabled="true"  
  4.           android:exported="true"></receiver>  

如果我们要配置action 和广播优先级代码如下:

[html] view plain copy
  1. <receiver  
  2.      android:name=".module.base.MyReceiver"  
  3.      android:enabled="true"  
  4.      android:exported="true">  
  5.   
  6.     <intent-filter android:priority="10">  
  7.   
  8.         <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>  
  9.     </intent-filter>  
  10.   
  11. </receiver>  

注意:广播的优先级范围是 -1000~1000,数值越大优先级越高。action中name的值也可以是我们自定义的字符串。

②动态注册:就是通过代码在其它组件中进行手动注册。注册代码如下:

[html] view plain copy
  1. private static final String Config = "com.adc.test.broadcast";  
[java] view plain copy
  1. IntentFilter filter = new IntentFilter(Config);  
  2. MyReceiver receiver = new MyReceiver();  
  3. registerReceiver(receiver,filter);  

如果要终止此广播只需要调用:unregisterReceiver(receiver);

静态广播,只要我们app启动就会随之启动,动态广播只有我们打开相应的界面才启动,在项目中根据实际情况我们来做合理选择。

注意点:如果BroadcastReceiver 中的onReceiver中接收事件在10s内没有处理完毕,就会导致ANR异常的发生,所以在广播中我们也不要进行耗时操作。如果要进行耗时操作,可以选择通过Intent 打开一个Service开启子线程的方式,或者是通过IntentService来完成相应的处理。

(3)广播的种类:

①普通广播:

特点:①所有监听此广播的接受者都能接受此广播②优先级相同的广播接受者是无序的,没有先后。不同优先级,优先级大的先接受到③不能阻断广播,也不能对广播进行处理。④同级别动态注册高于静态注册。

②有序广播:

特点:①按照优先级顺序来传递广播,②广播接受者可以阻断广播的传递,并且能处理广播,阻断广播的方法是:abortBroadcast();③同级别接收顺序是随机的。④动态注册高于静态注册。

③粘性广播(已经被弃用)

以上广播都是系统全局广播,顾名思义,全局广播,系统中的任意程序都能接收到。当我们一个程序携带敏感数据的时候,有可能会被其它应用程序截获,造成信息的泄露,为了解决此安全问题,android引入了一套本地广播机制,这个机制的广播只能在程序的内部进行传递,并且接收器也只能接收本应用中的广播。

(4)发送广播的方法:

①普通广播:sendbroadcast(intent);

②有序广播:sendOrderbroadcast(intent,null);第二个参数是设置权限,接收器只有具有相应的权限才能接收到。

(5)本地广播

①本地广播的使用方法:通过localBroadcastManager进行统一管理,其提供了注册和发送广播的方法

②使用流程:和全局广播动态注册基本相似。

一,获取localBroadcastManager实例:LocalBroadcastManager.getInstance(上下文);

二,localBroadcastManager.senbroadcast(intent);发送广播

三,注册本地监听广播:localBroadcastManager.registerReceiver(myReceiver,infilterFilter)。

contentProvider

1、简介:

contentProvider是android四大组件之一,ContentProvider是为不同应用之间数据共享,提供统一的接口。

使用场景:如果获取联系人信息,音视频库,图片库等需求,可以使用内容提供者来更好的实现功能。

2、优势:

ContentProvider共享数据的好处是提供了统一数据访问方式,这也是开发ContentProvider的原因。其它的对外提供数据的方式:如文件数据提供,访问数据的方式需要文件读写的方式(I/O),sp数据提供,需要使用spAPI提供的读取方式。这些都不能提供统一提供数据的方式,ContentProvider可以解决此类问题。

3、参数的对象

①contentProvider  

我们需要写一个类继承contentProvider类,重写 crud四个方法和onCreate 和getType方法。

②contentResolver

ContentResolver contentResolver  =  getContentResolver();

contentResolver.insert/updata/delete/query对contentProvider提供的数据进行增删改查。增删该查都是通过我们参数中传递的uri,contentProvider中通过比对这个uri是否是自己对外提供的,如果是就进行相应的操作,不是就不会处理。

③contentObserver

获取实例方式:写一个类继承contentObserver

注意点:必须要实现其构造函数,构造函数中传递了一个handler对象,这个对象依赖于contentObserver中的onChange(boolean selfChange)方法,此方法就是当contentObserver观察的uri数据发生变化的时候会回调此方法。我们在通过handler把变化结果返回到主线程中,进行相应的操作。真正的开发中我们自己定义内容提供者是很少的,一般都是用系统的ContentProvider。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值