Andoroid 广播

广播

广播是一种通知方式,是一种android系统android应用以及android应用与android应用之间传递消息的方式,,这项广播会在特定的事件发生时发送,例如对于android系统来说,它会在发生特定系统事件时发生,比如充电时、开机时、开关飞行模式时。android应用可以发送自定义广播来通知其他程序。

每个应用都可以对自己感兴趣的的广播进行注册,这样在别的应用发送广播时系统会自动将广播传递给同意接收这些广播的应用。

android提供了一套完整的API,允许程序引用自由的接收和发送广播,一般来说,广播可以作为跨应用和普通用户流之外的消息传递系统。但是不要滥用在后台响应广播和运行的机会,因为android应用在接收广播之后会自动被唤醒,如果内存不够,系统会频繁杀死进程,但是广播有会将进程唤醒,在短时间内反复执行,这种现象被称为内存抖动,这会导致系统变慢。

广播类型:

  • 标准广播(normal broadcasts):这是一种完全异步执行的广播,在广播发出之后,所有的广播接收者几乎会同一时间接收到这条消息,因此他们之间完全没有先后顺序,这种广播效率较高,但是在发送过程中无法被截断。
广播
a
b
c
  • 有序广播(ordered broadcasts):这是一种同步执行的广播,广播发出后同一时间只有一个广播接收者能够收到这条消息,当这个广播接收者执行完毕才会将广播传递下去,所以是有先后顺序的,优先级高的广播接收者能优先收到消息,而且可以将正在传递的广播截断,这样后面的广播接收者就无法收到消息了。
可被截断
可被截断
发出一条广播
b
c

接收系统广播

Android内置了很多系统级别的广播,我们可以在应用程序中通过监听这些广播来得到系统的状态信息,比如手机开机时会发出一条广播,电池电量发生变化时会发出一条广播,系统时间改变时也会发出广播,如果想要接收这项广播就必须使用BroadcastReceiver。

动态注册监听时间变化

使用RroadcastReceiver只需要创建一个类然后继承RroadcastReceiver,并重写onReceive()方法,这样当广播来到时,onReceive()方法就会执行,并且具体逻辑就会在这个方法中处理。

写一个程序用来监听系统时间变化:

class ReceiveSystemBroadcastActivity : AppCompatActivity()
{
//    create BroadcastReceiver Instance
    lateinit var timeChangeReceiver : TimeChangeReceiver;
    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_receive_system_broadcast);
        val intentFilter = IntentFilter();
        intentFilter.addAction("android.intent.action.TIME_TICK");
        timeChangeReceiver = TimeChangeReceiver();
        registerReceiver(timeChangeReceiver,intentFilter);
    }
//  Receive  Broadcast
    inner class TimeChangeReceiver : BroadcastReceiver()
    {
        override fun onReceive(context: Context?, intent: Intent?)
        {
            Toast.makeText(context,"Times has changed",Toast.LENGTH_SHORT).show();
        }

    }
//  Turn off broadcast reception
    override fun onDestroy()
    {
        super.onDestroy()
        unregisterReceiver(timeChangeReceiver)
    }
}

​ 首先定义一个内部类TimeChangeReceiver继承自BroadcastReceiver,这样当接收广播时就会调用onDestroy()方法,这里简单的Toast提示一段文本信息。

然后看到onCreate() 方法中,首先定义了一个IntentFilter()对象,所有的广播消息都会被封装在Intent()对象中,这里声明一个Intent对象的过滤器,添加android.intent.action.TIME_TICK参数,系统中每一个广播都有一个广播参数,这个参数的意思正是监听系统时间变化,然后将过滤器和广播监听器一起传入registerReceiver()中,这样TimeChangeReceiver就能监听到android.intent.action.TIME_TICK的广播,也就实现了监听系统时间变化的功能,最后记得动态注册的广播一定要关闭才行,所以我们在onDestroy()将广播接收者关闭。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值