BroadcastReceiver—使用(III)

   3. 生命周期

  描述了 Android 中广播的生命周期,其次它并不像 Activity 同样复杂,运行原理很简单以下图:java

 生命周期只有十秒左右,若是在 onReceive() 内作超过十秒内的事情,就会报错。

  每次广播到来时 , 会从新建立 BroadcastReceiver 对象 , 而且调用 onReceive() 方法 , 执行完之后 , 该对象即被销毁 . 当 onReceive() 方法在 10 秒内没有执行完毕, Android 会认为该程序无响应 . 因此在BroadcastReceiver 里不能作一些比较耗时的操做 , 否侧会弹出 ANR(Application No Response) 的对话框.

        怎么用好 BroadcastReceiver

    若是须要完成一项比较耗时的工做 , 应该经过发送 Intent 给 Service, 由 Service 来完成 . 这里不能使用子线程来解决 , 由于 BroadcastReceiver 的生命周期很短 , 子线程可能尚未结束BroadcastReceiver 就先结束了 .BroadcastReceiver 一旦结束 , 此时 BroadcastReceiver 的

  所在进程很容易在系统须要内存时被优先杀死 , 由于它属于空进程 ( 没有任何活动组件的进程 ). 若是它的宿主进程被杀死 , 那么正在工做的子线程也会被杀死 . 因此采用子线程来解决是不可靠的.

  广播类型及广播的收发
  广播类型

   普通广播 (Normal broadcasts)

  发送一个广播,因此监听该广播的广播接收者均可以监听到改广播。
  异步广播 , 当处理完以后的Intent ,依然存在,这时候registerReceiver(BroadcastReceiver,IntentFilter) 还能收到他的值,直到你把它去掉 , 不能将处理结果传给下一个接收者 , 没法终止广播. 


   有序广播 (Ordered broadcasts)

        广播的收发

  该组件接收被广播的 intent,Context 能够经过 sendBroadcast() 和 sendOrderedBroadcast()
  方法实现广播的发送.

  首先在须要发送信息的地方 ,把要发送的信息和用于过滤的信息 ( 如 Action 、 Category) 装入一个 Intent 对象 ,而后经过调用 Context.sendBroadcast() 、 sendOrderBroadcast() 或 sendStickyBroadcast() 方法,把 Intent 对象以广播方式发送出去。

  使用 sendBroadcast() 或 sendStickyBroadcast() 方法发出去的 Intent ,全部知足条件的 BroadcastReceiver 都会随机地执行其 onReceive() 方法

   普通广播的发送和接收:

sendBroadcast(intent);
Intent intent = new Intent( "cn.lenovo.yangguangf " );
sendBroadcast(intent);



     priority :这个是 AndroidManifest.xml 中 intent-filter 的参数。android

< receiver android:name = ".MyBroadcastReceiver" >
< intent-filter android:priority = "1000" >
< action android:name = "cn.lenovo.yangguangfu" />
相关文章
相关标签/搜索