写点什么

Android 题集四大组件之 Content provider、BroadcastReceiver

用户头像
Android架构
关注
发布于: 2021 年 11 月 05 日

这是一种让系统在正常的用户流之外,传递事件给 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 之间的关系?

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android题集四大组件之Content provider、BroadcastReceiver