Broadcast receivers
广播接收器是一种用于响应系统范围广播通知的组件,它使得系统可以在用户流之外进行事件的分发.因为广播接收器也是一个定义完善的应用入口,所以即使应用没有在运行,系统也可以向它分发广播事件.比如,应用可以预定给用户推送那些未发生事件的通知,当事件发生后向该应用的广播接收者发送广播,应用接收到广播后再推送通知,在接收到广播之前应用就没有必要一直保持运行.
许多广播都是由系统发起的(例如,通知屏幕已关闭、电池电量不足或已拍摄照片的广播).除了系统,应用也可以发起广播(例如,通知其他应用某些数据已下载至设备,并且可供其使用).
尽管广播接收器不会显示用户界面,但它们可以创建状态栏通知,在发生广播事件时提醒用户.但广播接收器更常见的用途只是作为通向其他组件的“通道”,执行极少量的工作.例如,它可能会安排一项JobService服务来执行基于JobScheduler的事件.
广播接收器作为 BroadcastReceiver的子类实现,并且每条广播都作为 Intent 对象进行传递.了解详细信息,参阅BroadcastReceiver类.
Content providers
内容提供者管理一组共享的应用数据.我们可以将数据存储在文件系统、SQLite数据库、网络上或您的应用可以访问的任何其他永久性存储位置.只要内容提供者允许,其他应用就可以通过内容提供者查询数据,甚至修改数据.例如,任何具有适当权限的应用都可以通过Android系统自带的管理联系人信息的内容提供者来查询,读取和写入有关特定联系人的信息.
我们很容易把内容提供者当做是数据库的抽象,但是从系统设计的层面来看它们的核心目的是不同的.对系统而言,内容提供者是应用发布已命名的数据条目(通过URI方案定义)的进入点.因此应用可以决定怎样将它的数据映射到一个URI名空间,然后其他实体就可以通过这些分发的URI来访问对应的数据.
-
URI的分发并不需要数据所属的应用保持运行,所以应用退出后URI仍然存在.系统只需要保证在通过URI获取该URI对应的数据时,应用在运行就行了.
-
这些URI也提供了一个细粒度的安全模型.比如,应用可以把它的一张图片的URI放置在剪切板,但它的内容提供者并非是其他应用可以访问的.当有其他应用访问剪切板上的URI时,系统会给该应用一个临时权限(URI permission
grant),从而使得该应用在不能访问图片所在应用其他内容的前提下通过这个剪切板上的URI来获取数据.
内容提供者也适用于读取和写入我们应用不共享的私有数据.例如,记事本示例应用使用内容提供程序来保存笔记.
内容提供程序作为ContentProvider的子类实现,并且必须实现让其他应用能够执行事务的一组标准 API. 如需了解详细信息,请参阅内容提供者开发者指南.
网友评论