Android(六)之内容提供者等、广播、service

一、内容提供者的工作原理

假设B程序需要操作A程序数据库中的数据,一般需要A程序使用ContentProvider暴露数据,才能被其他程序操作。B程序通过ContentResolver操作A程序暴露出来的数据,而A程序会将操作结果返回给ContentResolver,然后ContentResolver再将操作结果返回给B程序。

二、内容观察者的工作原理

使用ContentObserver观察A程序的数据时,首先要在A程序的ContentProvider中调用ContentResolver的notifyChange()方法。调用此方法后,当B程序操作A程序中的数据时,A程序会向“消息中心”发送数据变化的消息,此时C程序会观察到“消息中心”的数据有变化,会触发ContentObserver的onChange()方法。

三、Uri主要由三部分组成

  • scheme
  • authority
  • path

四、广播机制的实现过程

Android中的广播使用了观察者模式,即基于消息的发布/订阅事件的模式。广播发送者和接收者分别处于观察者模式中的消息发布和订阅两端。广播机制的实现过程具体如下:
(1)广播接收者通过Binder机制在AMS(Activity Manager Service)中进行注册。
(2) 广播发送者通过Binder机制向AMS发送广播。
(3) AMS查找符合相应条件(IntentFilter/Permission)的广播接收者,将广播发送到相应的消息循环队列中。
(4)执行消息循环时获取到发送的广播,然后回调广播接收者中的onReceive()方法并在该方法中进行相关处理。

五、有序广播和无序广播的区别

广播分为有序广播和无序广播,他们有以下几点的区别。
(1) 发送广播时,使用的方法不同。有序广播使用sendOrderedBroadcast()发送广播,而无序广播使用sendBroadcast()方法发送广播。

(2) 广播接收者执行的顺序
a)有序广播的接收者是顺序执行的。
有序广播按照广播接收者声明的优先级别被依次接收。当在高级别的广播接收者逻辑执行完毕之后,广播才会继续传递。当优先级相同时,先注册的广播接受者优先执行。
b)无序广播是完全异步执行的。
当发送无序广播时,所有监听这个广播的广播接收者都会接收到此广播消息,但接收和执行的顺序不确定。

(3)拦截广播
有序广播的接收者可拦截广播。如果优先级较高的广播接收者将广播终止,那么广播将不再向后传递。而无序广播则不能被拦截。

(4)效率
有序广播的效率比无序广播低。

六、Service的两种启动方式

Service的启动方式分别可以调用startService()、bindService()方法,这两个启动方式的区别如下所示:

(1) 生命周期
startService():使用该方法开启Service时,执行的生命周期方法依次为onCreate()、onStartCommand()、onDestroy()。

bindService():使用该方法开启Service时,执行的生命周期方法依次为:onCreate()、onBind()、onUnbind()、onDestroy()。

(2)停止服务的方法
startService():调用stopSelf()、stopService()方法停止服务。
bindService():调用unbindService()方法停止服务。

(3) 组件的关联
startService():当一个组件通过此方法开启服务时,服务与开启该组件没有关联,即使开启服务的组件被销毁,服务依旧运行。
bindService():当一个组件通过此方法开启服务时,服务会与该组件绑定,组件一旦被销毁,该服务也会被销毁。

七、Service的生命周期

使用不同的方式启动服务,其生命周期会不同。开启服务的方法分别为startService()、bindService(),当通过startService()方法启动服务时,执行的生命周期方法依次为onCreate()、onStartCommand()、onDestroy()。当通过bindService()方法启动服务时,执行的生命周期方法依次为onCreate()、onBind()、onUnbind()、onDestroy()。
其生命周期方法的具体含义如下:
(1)onCreate ():第一次创建服务时执行的方法。
(2)onStartCommand():调用startService()方法启动服务时执行的方法。
(3)onBind():调用bindService()方法启动服务时执行的方法。
(4)onUnbind():调用unBindService()方法断开服务绑定时执行的方法。
(5)onDestory():服务被销毁时执行的方法。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下载一个cebx阅读器即可 《Android高薪之路:Android程序员面试宝典》目录: 第1章 Android入门 1 1 关于Android的非技术问题 1 1 1 为什么看好 Android 1 1 2 以前是否从事过Android的工作 做过哪些工作 1 1 3 你做的最复杂的界面是什么 1 1 4 如何解决Android学习中遇到的难题 1 1 5 Android只能在手机或其他移动设备上使用吗 1 2 Android的基本概念 1 2 1 Android的特点都有哪些 1 2 2 MVC模式 1 2 3 Android 的系统构架 1 3 开发Android应用程序 1 3 1 搭建Android开发环境 1 3 2 Android开发环境的使用 第2章 布局 2 1 Android中的布局 2 2 布局使用技巧 2 2 1 FrameLayout布局 2 2 2 LinearLayout布局 2 2 3 RelativeLayout布局 2 2 4 TableLayout布局 2 2 5 AbsoluteLayout布局 2 2 6 将布局存成图像 2 2 7 设置渐变背景色 2 3 布局属性 2 3 1 android:layout weight属性 2 3 2 android:padding属性和android:layout margin属性 2 3 3 android:layout gravity属性和android:gravity属性 2 4 高级布局技术 第3章 组件 3 1 组件的属性 3 2 文本组件 3 3 按钮组件 3 4 图像组件 3 5 进度组件 3 6 列表组件 3 7 容器组件 3 8 自定义组件 3 9 四大应用程序组件 3 9 1 Android中的窗口:Activity 3 9 2 广播接收器:Broadcast Receiver 3 9 3 服务 Service 3 9 4 内容提供者 Content Provider 第4章 对话框 信息提示和菜单 4 1 对话框 4 2 信息提示 4 2 1 Toast信息框 4 2 2 通知 Notification 4 3 菜单 第5章 文件存储 5 1 SharedPreferences 5 2 流文件 5 3 XML存储 5 4 JSON存储 第6章 数据库 6 1 SQLite基础知识 6 2 SQLite 函数 6 2 1 核心函数 6 2 2 日期和时间函数 6 2 3 聚合函数 6 3 在Android中使用SQLite 6 4 面向对象数据库:db4o 第7章 网络与加密 7 1 客户端Socket 7 2 服务端Socket 7 3 非阻塞I O 7 4 WebView控件 7 5 HTTP和HTTPS 7 6 加密技术 第8章 蓝牙与Wi Fi 8 1 蓝牙 8 2 Wi Fi 第9章 电话 短信和联系人 9 1 来电和回电 9 2 短信 9 3 彩信 9 4 联系人 第10章 多媒体技术 10 1 音频 10 2 视频 10 3 摄像头 10 4 铃声 第11章 2D绘图与动画技术 11 1 绘制基本图形 11 2 图像特效 11 3 路径 11 4 帧 Frame 动画 11 5 补间 Tween 动画 第12章 OpenGL ES 12 1 OpenGL ES简介 12 2 理解3D坐标系:照相机原理 12 3 如何使用OpenGL ES绘制图形 12 4 绘制2D图形 12 5 绘制3D图形 12 6 光照效果 第13章 Android系统的资源 13 1 资源的基础问题 13 2 本地化 13 3 字符串资源 13 4 布局资源 13 5 图像资源 13 6 其他资源 第14章 其他面试例题 14 1 NDK编程 14 2 传感器 14 3 语音识别技术 14 4 Google地图与GPS 14 5 桌面插件 14 6 输入法开发 14 7 测试驱动开发 14 8 性能优化">下载一个cebx阅读器即可 《Android高薪之路:Android程序员面试宝典》目录: 第1章 Android入门 1 1 关于Android的非技术问题 1 1 1 为什么看好 Android 1 1 2 以前是否从事过Android的工作 做过哪些工作 1 1 3 你做的最复杂的界面是什么 1 1 [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值