?
Android - Broadcast receiver 作为内部类接受广播
?
?
Broadcast的注册有两种方式,一种是在代码中动态注册,另一种是在AndroidManifest.xml中静态注册。
?
?1)动态不是常驻型广播,也就是说广播跟随程序的生命周期。
?2)静态是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。
?
?
?
BroadcastReceiver 作为一个独立的class 会有一些棘手的问题 挡在大家面前
?
1. 如何把得到的信息返回给某个Thread
2. 代码比较零散 有一些阅读障碍
?
?
为解决以上问题:将Broadcast receiver作为内部类接收广播。
?
class MyReceiver extends BroadcastReceiver { Context context; public MyReceiver(Context c){ context = c; } //动态注册 public void registerAction(String action){ IntentFilter filter = new IntentFilter(); filter.addAction(action); context.registerReceiver(this,filter); } @Override public void onReceive(Context context, Intent intent) { //接收广播内容. } } }??
?
动态注册一般在onResume()方法里面注册。
?
@Overridepublic void onResume() { myReceiver = new MyReceiver(this); myReceiver.registerAction("myreceiver.action.name");}??
?
在onPause()方法里面取消注册。
?
@Override protected void onPause() { unregisterReceiver(myReceiver); super.onPause(); }?
?