广播中的概念
标准广播,有序广播
静态注册,动态注册
隐式广播,显式广播
广播机制简介
广播:类似于计算机网络中 的广播概念。划分为了标准广播和有序广播。
有序广播通过不同接收者的权重,实施有序的发送广播,接收者拥有将广播 从此处截断的权利
隐式广播和显式广播
隐式广播:没有具体指定发送给哪个应用程序的广播。
显式广播:指定了发送广播的目的应用程序。
开发者通过在intent中setPackage(packageName)来指定接受广播的app -> 显式广播。不设置就是隐式广播。
ps:Android 8.0之后静态注册的广播接收无法接收隐式广播
接收系统广播
BroadcastReceiver的使用
1. 代码注册
val intentFilter = IntentFilter()
intentFilter.addAction(Intent.ACTION_TIME_TICK)
val timeChangeReceiver = TimeChangeReceiver()
registerReceiver(timeChangeReceiver, intentFilter)
2. xml文件注册
<receiver android:name=".BootCompleteReceiver"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
两者区别:a.intent-filter的两种方式 b.实现BroadcastReceiver类的两种绑定
接收后逻辑编写,重写onReceive()
inner class TimeChangeReceiver: BroadcastReceiver(){
override fun onReceive(p0: Context?, p1: Intent?) {
Toast.makeText(p0, "Time has changed", Toast.LENGTH_SHORT).show()
}
}
ps:静态注册 接收系统 隐式广播,需要申请相关权限
不要在onReceive()中放过多的逻辑或任何耗时操作,因为BroadcastReceiver 是不允许开启线程的。
发送广播
发送广播有两种: 标准广播,有序广播
实现简例:
//发送广播(显式,发送给某广播)
val intent = Intent("com.example.broadcast.My_Test_Broadcast")
intent.setPackage(packageName)
//标准广播
sendBroadcast(intent)
//有序广播
sendOrderedBroadcast(intent, null)
有序广播接收时的区别:
intentFilter.priority来设置接收的先后,调用abortBroadcast()可以截断广播的后续传播
广播的最佳实践:实现强制下线功能
kotlin课堂:高阶函数详解
kotlin的高级用法
定义高阶函数
高阶函数和lambda密不可分,想要定义自己的函数式API,需要借助高阶函数来实现。
高阶函数的定义:一个函数接收 另一个函数作为参数,或者返回值的类型是另一个函数,该函数为高阶函数。
函数类型的定义 :左边是函数的接收参数类型,右边是返回值类型Unit相当于Java中的void
(String, Int)->Unit
example就是一个高阶函数
fun example(func: (String, Int) -> Unit){
func("Hello", 123)
}
函数类型的引用 通过 ::函数名