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

0 1,140

—— 今朝有心苦勤奋,明朝一举步青云。

Broadcast receiver是什么

Broadcast receiver(广播接收器)是一个Android 组件,它允许你注册系统或应用程序事件。一旦该事件发生,Android 运行时会通知所有已注册的事件接收者。举个简单的例子,这就好比在学校里,当训导主任广播寻找王小明时,训导主任只需要告知要找的是几年几班的王小明(不用知道他在哪里),尽管全校的同学都会听到这则广播,但会去训导处报到的,就只有王小明。在android 中,我们时常需要利用此一机制,让程序能在任何时候,对于不同的广播讯息做出正确的反馈。例如,当注册了 ACTION_BOOT_COMPLETED广播后,一旦 Android 系统完成启动过程程序的广播接收器就会收到响应。

Broadcast receiver的生命周期

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

广播的生命周期并不像 Activity 一样复杂,广播的生命周期从调用开始到onReceiver执行完毕结束,需要注意的是,一般广播的生命周期都极短,需要在10s内处理完onReceiver中的所有工作,所以,一般不进行耗时长的工作,如果有耗时长的工作,应当通过Intent传递给Service进行处理。(注意,不要在onReceiver中开启线程进行耗时任务处理,否则,在10s后,该线程会变成空线程,从而导致任务的丢失。同样的,也不要使用bindService来绑定服务。)

值得注意的是,如果是在代码中动态注册的广播,如:在Activity注册,那么在Activity的onDestory中需要使用unregisterReceiver注销广播。

Broadcast receiver的用法

可以通过 AndroidManifest.xml 文件注册广播接收器,除了这种静态注册,还可以通过该 Context.registerReceiver() 方法动态注册广播接收器。接收器的实现类需要实现 BroadcastReceiver接口。如果广播接收器注册的事件发生,onReceive() Android系统调用接收器的方法,

1. 静态注册广播

静态注册一个飞行模式变化的广播

1
2
3
4
5
6
<receiver android:name=".MyScreenReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.AIRPLANE_MODE" />
    </intent-filter>
</receiver>

创建一个BroadcastReceiver广播接收器

1
2
3
4
5
6
7
8
9
public class MyScreenReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
      Log.d("hel->""飞行模式发生了变化...");
  }
}

当开启飞行模式或者关闭飞行模式时onReceive方法响应。

1. 动态注册广播

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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);
    }
}
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章资源,如无特殊说明或标注,均为本站网友和创作者贡献分享。如若本站内容侵犯了原著者的合法权益,可联系网站客服QQ2743319061删除。

云炬星球 安卓教程 Android开发学习教程(29)- Android BroadcastReceiver(广播) https://src.yunjunet.cn/876829.html

常见问题
  • 放心亲,我们不会为了几十块钱的东西坏了名声!
查看详情
  • 方法一:点击“立即下载.”按钮,付款后在下载弹窗的虚线框的隐藏信息里获取 方法二:在正文底部使用VIP查看隐藏的解压密码 方法三:联系【云炬网络】公众号客服获取
查看详情
  • 付款后会出现“立即下载”按钮(点击即可下载),如果下载失败也可以联系客服发订单截图补发。
查看详情
  • 登录购买会多端同步购买记录,永久可以查看反复下载;非登录购买仅将购买记录保存到本地浏览器中,浏览器cookie清除后无法再次下载。先右上角点登录,然后点击微信图标可以快速授权注册登录^_^
查看详情
  • 可以试看。点击”查看演示“或“试看预览”按钮可以试读从资料目录中节选的部分内容,也可以自己指定想试看的内容。
查看详情
  • 原因一:本站所有资源已开启有效性检测(服务器24h全自动监测),当监测到下载链接无法访问时会提示“该资源已失效,请勿购买”,遇到这种情况可以联系客服修复失效的下载链接,或直接联系客服在淘宝下单购买即可。(检测原理:购买前服务器程序会预访问下载链接,响应值为200说明资源有效允许购买,响应值为404或502等报错说明资源失效禁止购买)。原因二:上传者未启用“下载”选项。
查看详情
官方客服团队

为您解决烦忧 - 24小时在线 专业服务