1.6.2 Service

来源:互联网 发布:考研上海师范大学 知乎 编辑:程序博客网 时间:2024/06/01 09:30

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

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 火中取栗是什么意思 完熟中保契约栗野叶子 栗中棕色 栗丽君 栗丽君出狱了吗 石家庄栗丽君 栗先达 栗先达本人照片 栗再温 栗原惠 栗原 栗原小卷照片 栗原类 栗山绿 小扁豆煮山栗 住在他心上桔子栗 栗在山 海哥栗子作品 海哥栗子 金刚骷髅 金刚骷髅 海哥栗子 河南栗子园食品饮料有限公司 栗子园苏打水 栗子园 栗子壳属于什么垃圾 栗子壳 板栗壳的功效与作用 栗子头发型 栗子头发型男 栗子头图片 栗子姐 毛栗子树 栗子树为什么不能在家里种 栗子树种植方法 栗子球 栗子粥 栗子粥的做法 红枣栗子粥 栗子糕的做法 桂花栗子糕 板栗糕的做法 板栗糕