Android 题集四大组件之 Content provider、BroadcastReceiver
这是一种让系统在正常的用户流之外,传递事件给 APP 的机制,BroadcastReceiver 也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。
[](
)广播类型有几种?
标准广播:调用 sendBroadcast()发送,最常用的广播。
有序广播:调用 sendOrderedBroadcast(),发出去的广播会被广播接受者按照顺序接收,广播接收者按照 Priority 属性值从大-小排序,Priority 属性相同者,动态注册的广播优先,广播接收者还可以 选择对广播进行截断和修改。在第一个接收广播的 onReceive()中,如果写了 abortBroadcast()方法,就表示接收的这条广播被截断了。
[](
)广播的两种注册方式有什么区别?
静态注册:常驻系统,不受组件生命周期影响,即便应用退出,广播还是可以被接收,耗电、占内存。
动态注册:非常驻,跟随组件的生命变化,组件结束,广播结束。在组件结束前,需要先移除广播,否则容易造成内存泄漏。
[](
)广播发送和接收的步骤是什么?原理了解吗?
继承 BroadcastReceiver,重写 onReceive()方法。
通过 Binder 机制向 ActivityManagerService 注册广播。
通过 Binder 机制向 ActivityMangerService 发送广播。
ActivityManagerService 查找符合相应条件的广播(IntentFilter/Permission)的 BroadcastReceiver,将广播发送到 BroadcastReceiver 所在的消息队列中。
BroadcastReceiver 所在消息队列拿到此广播后,回调它的 onReceive()方法。
[](
)ContentProvider
=============================================================================
ContentProvider 主要用于不同应用程序之间实现数据共享的功能,其主要负责存储和共享数据。与文件存储、SharedPreferences 存储、SQLite 数据库存储这几种数据存储方法不同的是,后者保存下的数据只能被该应用程序使用,而前者可以让不同应用程序之间进行数据共享,它还可以选择只对哪一部分数据进行共享,从而保证程序中的隐私数据不会有泄漏风险。
[](
)ContentProvider 是如何实现数据共享的?
在 Android 中如果想将自己应用的数据(一般多为数据库中的数据)提供 给第三发应用,那么我们只能通过 ContentProvider 来实现。ContentProvider 是应用程序之间共享数据的接口。使用的时候首先自定义一个类继承 ContentProvider,然后覆写 query、insert、update、delete 等方法。因为其是四大组件之一因此必须在 AndroidManifest 文件中进行注册,把自己的数据通过 uri 的形式共享出去 。
[](
)ContentProvider、ContentResolver、ContentObserver 之间的关系?
评论