URI
Uri:scheme + authority + path组成
Android规定secheme为:content://
authority:标识provider,系统通过authority来找到对应的Provider
我们开发Provider有两个步骤
- 继承ContentProvider,重写相应方法
- 在AndroidManifest.xml中配置Privider组件
<provider android:name = ".MyProvider"
android:authority = "com.mingwei.zheng.myProvider"
android:exported = true />
所以当我们的URI中的authority为配置中的”com.mingwei.zheng.myProvider”时,系统就会找MyProvider来处理该URI的请求。
Service
Service:是Android的四大组件之一,没有用户界面,在后台运行,它是运行在主线程的,因此如果做耗时操作会阻塞主线程,可能导致ANR,所以耗时操作要开子线程去做。
编写Service的两个步骤:
- 继承Service重写其onCreate(),onStartCommand,onBind()…方法
- 在AndroidManifest.xml中配置该组件
启动Service的两种方式:
- 调用Context的startService ()方法,会回调onStartCommand()方法,访问者和Service没有关联,因此就算访问者退出,Service还会继续运行。
- 调用Context的bindService()方法,会回调onBind()方法,访问者和Service绑定,访问者退出,Service也会退出
需要注意的是,我们可以同时startService()和bindService(),在这中情况下,只有stopService()和unBindServide()一起调用之后,Service才会销毁。
bindServie的完整签名为bindService(Intent intent, ServiceConnectiong conn, int flag)
其中,ServiceConnction用来监听访问者与Service的连接状态,连接成功的时候会回调ServiceConnection的onServiceConnected(ComponentName String, IBinder service)方法,一个Activity可以绑定多个Service,我们通过包名来区分不同Service,做对应操作。
BroadcastReceiver:
广播,相当于一种全局的监听器,监听系统全局的广播消息。
开发步骤:
- 继承BroadcastReceiver,重写其onReceive()方法
- 在AndroidManifest.xml,中注册该组件
广播有两种:
- Normal Broadcast(普通广播):是异步的,可以在同一时刻被所有接收者接收。
- Order Broadcast(有序广播):在注册的时候设置priority,优先级高的先接收到广播进行处理
发送广播:
- Context.sendBroadcast()发送Normal广播
- Context.sendOrderBroadcast()发送有序广播