Android开发学习教程(29)- Android BroadcastReceiver(广播)
—— 今朝有心苦勤奋,明朝一举步青云。
Broadcast receiver是什么
Broadcast receiver(广播接收器)是一个Android 组件,它允许你注册系统或应用程序事件。一旦该事件发生,Android 运行时会通知所有已注册的事件接收者。举个简单的例子,这就好比在学校里,当训导主任广播寻找王小明时,训导主任只需要告知要找的是几年几班的王小明(不用知道他在哪里),尽管全校的同学都会听到这则广播,但会去训导处报到的,就只有王小明。在android 中,我们时常需要利用此一机制,让程序能在任何时候,对于不同的广播讯息做出正确的反馈。例如,当注册了 ACTION_BOOT_COMPLETED广播后,一旦 Android 系统完成启动过程程序的广播接收器就会收到响应。
Broadcast receiver的生命周期
广播的生命周期并不像 Activity 一样复杂,广播的生命周期从调用开始到onReceiver执行完毕结束,需要注意的是,一般广播的生命周期都极短,需要在10s内处理完onReceiver中的所有工作,所以,一般不进行耗时长的工作,如果有耗时长的工作,应当通过Intent传递给Service进行处理。(注意,不要在onReceiver中开启线程进行耗时任务处理,否则,在10s后,该线程会变成空线程,从而导致任务的丢失。同样的,也不要使用bindService来绑定服务。)
值得注意的是,如果是在代码中动态注册的广播,如:在Activity注册,那么在Activity的onDestory中需要使用unregisterReceiver注销广播。
Broadcast receiver的用法
可以通过 AndroidManifest.xml 文件注册广播接收器,除了这种静态注册,还可以通过该 Context.registerReceiver() 方法动态注册广播接收器。接收器的实现类需要实现 BroadcastReceiver接口。如果广播接收器注册的事件发生,onReceive() Android系统调用接收器的方法,
1. 静态注册广播
静态注册一个飞行模式变化的广播
<receiver android:name=".MyScreenReceiver" > <intent-filter> <action android:name="android.intent.action.AIRPLANE_MODE" /> </intent-filter> </receiver>
创建一个BroadcastReceiver广播接收器
public class MyScreenReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d("hel->", "飞行模式发生了变化..."); } }
当开启飞行模式或者关闭飞行模式时onReceive方法响应。
1. 动态注册广播
public class MainActivity extends AppCompatActivity { private AirplaneModeChangeReceiver receiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { receiver = new AirplaneModeChangeReceiver(); IntentFilter filter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED); registerReceiver(receiver, filter); } }); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(receiver); } }
本篇源码下载地址:https://pan.baidu.com/s/16VNyqBmiyANdOY2ouicWpQ 提取码: helu
------转载请注明出处,感谢您对原创作者的支持------
有偿提供技术支持、Bug修复、项目外包、毕业设计、大小作业
Android学习小站
Q Q:1095817610
微信:jx-helu
邮箱:1095817610@qq.com
添加请备注"Android学习小站"
