1.6.2 Service

Service与Activity的地位时并列的,它代表的是一个单独的Android组件。Service与Activity的区别在于:Service通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形化界面。

与Activity组件需要继承Activity基类相似,Service组件需要继承Service基类。一个Service组件被运行起来后,他将拥有自己独立的生命周期,Service组件通常用于为其他组件提供后台服务或者监控其他组件的运行状态。

》》1.6.3  BroadcastReceiver

BroacastReceiver是Android应用中另一个重要组件,开发者只需要是是实现自己的BroacastReceiver子类,并重写onReceiver(Context context,Intent intent)方法即可。当其他组件通过sendBroadcast(),sendStickyBroadcast()或sendOrderedBroadcast()方法发送广播时,如果该BroadcastReceiver也对该消息“感兴趣”(通过IntentFilter配置),BroadcastReveiver的onReveiver(Context context,Intent intent)被触动。

开发者实现自己的BroadcastReveiver之后,通常有两种方式来注册这个系统级的“时间监听器”。

> 在Java代码中通过Context.registerReceiver()方法注册BroadcastReveiver。

> 在AndroidManifast.xml文件中使用<receiver.../>元素完成注册。

》》1.6.4 ContentProvider

对于Android应用而言,他们必须相互独立,各自运行在自己的进程中,如果这些Android应用之间需要实现实时的数据交换——例如,我们开发了一个发送短信的程序,当发送短信时需要从联系人管理应用中读取指定联系人的数据——这就需要多个应用程序进行数据交换。

Android系统为这种跨应用的数据交换提供了一个标准:ContentProvider。当用户实现自己的ContentProvider时,需要实现如下抽象方法。

>insert(Uri,ContentValues):向ContentProvider插入数据。

>delete(Uri,ContentValues): 删除ContentProvider中的数据

>update(Uri,COntentValues,String,String[]) :更新ContentProvider中指定数据。

>query(Uri,String[],String,String[],String) :从ContentProvider查询数据。

通常与ContentProvider结合使用的时ContentResolver,一个应用使用ContentProvider暴露自己的数据,另一个应用程序使用ContentResolver来访问数据。

》》1.6.5 Intent和IntentFilter

Intent并不是android应用中的组件,但他对于Android应用的作用非常大——他是Android应用中不同组件之间通信的载体。当Android运行时需要连接不同的组件时,通常就需要借助于Intent来实现。Intent可以启动应用中另一个Activity,也可以启动一个Service组件,还可以发送一条广播消息来出发系统中BroadcastReveiver。也就是说,Activity,Reveiver,BroadcastReveiver三种组件之间通信都是通过Intent作为载体,只是各种组建之间使用Intent的机制略有不同而已。

>当需要启动一个Activity时,可调用Context的startActivity(Intent intent)或startActivityForActivity(Intent intent,int requestCode)方法,这两个方法中的Intent参数封装了需要启动的目标Activity的信息。

>当需要启动一个Service时,可调用Context的startService(Intent intent)方法或者bindService(Intetn service,ServiceConnection conn,int flags)方法,这两个方法中的Intent参数封装了需要启动的目标Service的信息。

>当需要触发一个BroadcastReveiver时,可调用Context的sendBoradcast(Intetn intent),sendStickyBroadcast犯法来发送广播消息,这三个方法中的Intent参数封装了需要触发的目标BroadcastReveiver的信息。

通过上面的信息不难看出,Intent封装了当前组件需要启动或触发的目标组件的信息,因此有些资料也将Intent翻译为意图。实际上Intent对象里封装了大量关于目标组件的信息。

>显示Intent:显示Intent明确指定需要启动或者触发的组件类名。

>隐式Intetn: 隐式Intent只是指定需要启动或者触发的组件应该满足怎样的条件

对于显示Intent而言,Android系统无须对该Intent做任何解析,系统直接找到指定的目标组件,启动或者触发它即可。

对于隐式Intent而言,Android系统需要对该Intent进行解析,解析出它的条件,然后再去系统中查找与之匹配的目标组件。如果找到符合条件的组件,就启动或者触发他们

那么Android系统如何判断被调用组件是否符合隐式Intent呢?这就需要IntentFilter来实现了,被调用组建可通过IntentFilter来声明自己所满足的条件——也就是声明自己到底能处理那些隐士Intent

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值