android之BroadcastReceiver

        别的类能通过sendBroadcast()方法收到intent.有两种方式注册一个receiver,一种是动态注册:context.registerReceiver().另一种是静态注册即:通过写<receiver>标签到AndroidManifest.xml.如果你在Activity.onResume()方法里注册一个receiver,你应该反注册它在Activity.onPause().(当pause的时候,你将收不到intent),不要反注册在Activity.onSaveInstanceState()方法里,因为它不会被call,如果用户返回。
        有两个主要的broadcast类能收到:
常规的broadcast:用context.sendBroadcast()方法发送,异步完成。这时所有的broadcast运行在一个没有定义的命令上在同一时间,但是这是很有效率的,同时也意味着接收者不能用这结果或者阻止APIs包含在这。
命令模式的broadcast:用context.sendOrderedBroadcast方法发送,一次交付给一个receiver, 并且每个receiver依次执行,它能传值给下一个receiver. 或者它能完全的阻止broadcast为了使它不能通过其它的receiver. 命令receiver依照优先级运行,同样的优先级将运行在一个任意的命令上。
        甚至在常规的broadcast情况下,系统也许在一些情况下也是一次交付给一个broadcast。特殊情况下,对于接收者也学要求创建一个新的进程,为了避免加载新进程的系统一个仅仅运行一次,在这种情况下,然而,不是命令模式的broadcast仍然不能返回结果或者阻止他们的broadcast.
注意,尽管intent类被用于发送和收到那些broadcast,但是与启动一个Activity是完全不一样的。当用startActivity方法的时候,接收者是没有方法看到或者获得intent的。同样当你广播一个intent,你将永远都不能发现或者开启一个Activity.这 两个操作在语义上是非常不同的:开启一个Activity是前台操作,广播一个intent是一个后台操作。
       Receiver的生命周期
       一个接收者仅仅有效的时间是从被call到执行onReceive(Context, Intent)方法,只要执行过这个方法,系统就会被完成并且不在活动。
重要的一点是你能完成你想做的在onReceive(Context, Intent)方法里。任何要求异步操作都不是有效的,因为你将需要返回值从那个方法处理那个异步操作,但是,在那个点上BroadcastReceiver将不再活动。
在特殊情况下,你也许不能展现一个dialog或者绑定一个服务在BroadcastReceiver里,对于前者,你应该用NotificationManager替代,对于后者,你能用Context.startService()启动一个service.

你可能感兴趣的:(android之BroadcastReceiver)