您当前的位置:首页 > Android教程

Android开发学习教程(29)- Android BroadcastReceiver(广播)

时间:2022-01-25 07:18:10 阅读数:18,706人阅读
版权声明:转载请注明出处,谢谢!
—— 今朝有心苦勤奋,明朝一举步青云。

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);
			}
		}
	  

本篇实例项目源码下载地址:

------转载请注明出处,感谢您对原创作者的支持------

有偿提供技术支持、Bug修复、项目外包、毕业设计、大小作业

Android学习小站

Q Q:1095817610

微信:jx-helu

邮箱:1095817610@qq.com

添加请备注"Android学习小站"