BroadcastReceiver

来源:互联网 发布:淘宝的费列罗是假货 编辑:程序博客网 时间:2024/05/17 08:00
BroadcastReceiver配置
//配置receiver的action匹配项,对应的activity类名(在activity中配置)<activity>    <receiver andorid:name=".ReceiverClassName">        <intent-filter>            <action...../>        </intent-filter>    </receiver></activity>



BroadcastReceiver的执行
  • 在广播消息到达时,系统会创建一个新的BroadcastRceiver实例并执行onReceive()方法处理广播响应,当处理完成后实例就会被销毁
  • 在onReceive()中如果处理时间超过5秒会产生ANR(Application not response)的错误
  • 在onReceive()中不能处理耗时的操作,如果需要进行耗时操作时,必须使用service,不可以使用子线程。这是由于使用子线程的话,onRecive()的处理时间很短,当创建子线程处理时,主线程已经处理被销毁,该子线程所在的进程即成为了空进程;当系统需要回收内存空间时,优先回收空进程,因此子线程可能无法完成就会被回收,这是不可靠的

发送广播

  • sendBroadcast(),发送Normal Broadcast,完全异步,可以在同一时刻被所有接收者接收到传递效率高
  • sendOrderedBroadcast(),发送Orderred Broadcast,按优先及依次接收广播并处理,可以将处理的结果传递给下一个接收者处理,效率比较低
//使用OrderedBroadcast优先接收的接收者可以终止广播的传递,使后面的接收者不再接收到该广播(拦截)//优先接收的接收者可以通过setResultExtras(Bundle)将处理结果存入broadcast传递给下一个接收者//重写接收者onReceive()方法public void onReceive(Context context, Intent intent){    //传递新数据    Bundle data=new Bundle();    data.putString("key","vaule");    setResultExtras(data);    //取消broadcast传播    //abortBroadcast();}



  • 配置优先级
//在activity中注册的receiver中配置<activity>    <!--注册receiver,指定该组件的类名-->    <receiver android:name=".ReceiverClassName">        <!--设置receiver的优先级,-1000到1000之间的值,值越大,优先级越高-->        <intent-filter android:priority="1000">            <!--设置receiver对应的action,用于匹配并启动receiver-->            <action.../>        </intent-filter>    </reciver></activity>



  • 部分系统广播在发送时已经指定了必须接收的broadcastReceiver,此时终止广播并不能阻止该receiver接收到广播(如拨号程序)
0 0
原创粉丝点击