Android四个基本组件(2)之Service 服务与Content Provider内容提供商

一、Service 维修:

一Service 这是一个长期的生命周期,没有真正的用户界面程序,它可以被用于开发如监视类别节目。

表中播放歌曲的媒体播放器。在一个媒体播放器的应用中。应该会有多个activity,让使用者能够选择歌曲并播放歌曲。然而。音乐重放这个功能并没有相应的activity,由于使用者当然会觉得在导航到其它屏幕时音乐应该还在播放的。在这个样例中。媒体播放器这个activity 会使用Context.startService()来启动一个service,从而能够在后台保持音乐的播放。同一时候,系统也将保持这个service 一直执行。直到这个service 执行结束。另外,我们还能够通过使用Context.bindService()方法,连接到一个service 上(假设这个service 还没有执行将启动它)。当连接到一个service 之后,我们还能够service 提供的接口与它进行通讯。拿媒体播放器这个样例来说,我们还能够进行暂停、重播等操作。

Service使用过程例如以下

   1>继承service类
   2>AndroidManifast.xml配置清单文件里<application>节点里对服务进行配置<service name=".SMSService"/>

服务不能自己执行,须要通过Contex.startService()或Contex.bindService()启动服务

通过startService()方法启动的服务于调用者没有关系,即使调用者关闭了,服务仍然执行想停止服务要调用Context.stopService(),此时系统会调用onDestory(),使用此方法启动时,服务首次启动系统先调用服务的onCreate()–>onStart(),假设服务已经启动再次调用仅仅会触发onStart()方法

使用bindService()启动的服务与调用者绑定,仅仅要调用者关闭服务就终止,使用此方法启动时,服务首次启动系统先调用服务的onCreate()–>onBind(),假设服务已经启动再次调用不会再触发这2个方法,调用者退出时系统会调用服务的onUnbind()–>onDestory(),想主动解除绑定可使用Contex.unbindService(),系统依次调用onUnbind()–>onDestory();

二、Content Provider内容提供者

android平台提供了Content Provider使一个应用程序的指定数据集提供给其它应用程序。

这些数据能够存储在文件系统中、在一个SQLite数据库、或以不论什么其它合理的方式,

其它应用能够通过ContentResolver类(见ContentProviderAccessApp样例)从该内容提供者中获取或存入数据.(相当于在应用外包了一层壳),

仅仅有须要在多个应用程序间共享数据是才须要内容提供者。

比如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中

它的优点:统一数据訪问方式。

android系统自带的内容提供者(顶级的表示数据库名,非顶级的都是表名)这些内容提供者在SDK文档的android.provider Java包中都有介绍。

见:http://developer.android.com/reference/android/provider/package-summary.html

├────Browser

├────CallLog

├────Contacts

│ ├────Groups

│ ├────People

│ ├────Phones

│ └────Photos

├────Images

│ └────Thumbnails

├────MediaStore

│ ├────Albums

│ ├────Artists

│ ├────Audio

│ ├────Genres

│ └────Playlists

├────Settings

└────Video

CallLog:地址和接收到的电话信息

Contact.People.Phones:存储电话号码

Setting.System:系统设置和偏好设置

使用Content Provider对外共享数据的步骤

1>继承ContentProvider类并依据需求重写下面方法:

public boolean onCreate();//处理初始化操作

       /**
        * 插入数据到内容提供者(同意其它应用向你的应用中插入数据时重写)
        * @param uri
        * @param initialValues 插入的数据
        * @return
        */
       public Uri insert(Uri uri, ContentValues initialValues);

       /**
        * 从内容提供者中删除数据(同意其它应用删除你应用的数据时重写)
        * @param uri
        * @param selection 条件语句
        * @param selectionArgs 參数
        * @return
        */
       public int delete(Uri uri, String selection, String[] selectionArgs);

       /**
        * 更新内容提供者已存在的数据(同意其它应用更新你应用的数据时重写)
        * @param uri
        * @param values 更新的数据
        * @param selection 条件语句
        * @param selectionArgs 參数
        * @return
        */
       public int update(Uri uri, ContentValues values, String selection,
                     String[] selectionArgs);

       /**
        * 返回数据给调用者(同意其它应用从你的应用中获取数据时重写)
        * @param uri
        * @param projection 列名
        * @param selection 条件语句
        * @param selectionArgs 參数
        * @param sortOrder 排序
        * @return
        */
       public Cursor query(Uri uri, String[] projection, String selection,
                     String[] selectionArgs, String sortOrder) ;         

       /**
        * 用于返回当前Uri所代表数据的MIME类型
        * 假设操作的数据为集合类型(多条数据),那么返回的类型字符串应该为vnd.android.cursor.dir/开头
        * 比如要得到全部person记录的Uri为content://com.bravestarr.provider.personprovider/person,
     *   那么返回的MIME类型字符串应该为"vnd.android.cursor.dir/person"
        * 假设操作的数据为单一数据,那么返回的类型字符串应该为vnd.android.cursor.item/开头
        * 比如要得到id为10的person记录的Uri为content://com.bravestarr.provider.personprovider/person/10,
     *   那么返回的MIME类型字符串应该为"vnd.android.cursor.item/person"
        * @param uri
        */
       public String getType(Uri uri)

这些方法中的Uri參数,得到后须要进行解析然后做相应处理,Uri表示要操作的数据,包括两部分信息:

   1.须要操作的contentprovider

   2.对contentprovider中的什么数据进行操作,一个Uri格式:结构头://authorities(域名)/路径(要操作的数据,依据业务而定)

          content://com.bravestarr.provider.personprovider/person/10

说明:contentprovider的结构头已经由android规定为content://

authorities用于唯一标识这个contentprovider程序,外部调用者能够依据这个找到他

路径表示我们要操作的数据,路径的构建依据业务而定.路径格式例如以下:

   要操作person表行号为10的记录,能够这样构建/person/10

   要操作person表的全部记录,能够这样构建/person

2>在AndroidManifest.xml中使用对ContentProvider进行配置注冊(内容提供者注冊它自己就像站点注冊域名),ContentProvider採用authoritie(原意授权,可理解为域名)作为唯一标识,方便其它应用能找到

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <!-- authorities属性命名建议:公司名.provider.SomeProvider-->
        <provider android:name=".PersonProvider" android:authorities="com.bravestarr.provider.personprovider"/>
         ...
</application>

版权声明:本文博主原创文章。博客,未经同意不得转载。

时间: 2024-11-13 14:30:01

Android四个基本组件(2)之Service 服务与Content Provider内容提供商的相关文章

Android四大基本组件(2)之Service 服务与Content Provider内容提供者

一.Service 服务: 一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序. 比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器.在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲.然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的.在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从

Android应用程序组件Content Provider简要介绍和学习计划

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6946067 在Android系统中,Content Provider作为应用程序四大组件之一,它起到在应用程序之间共享数据的作用,同时,它还是标准的数据访问接口.前面的一系列文章已经分析过 Android应用程序的其它三大组件(Activity.Service和Broadcast Receiver)了,本文将简要介绍Content Provid

Android 综合揭秘 —— 全面剖释 Service 服务

引言 Service 服务是 Android 系统最常用的四大部件之一,Android 支持 Service 服务的原因主要目的有两个,一是简化后台任务的实现,二是实现在同一台设备当中跨进程的远程信息通信. Service 服务主要分为 Local Service 本地服务与 Remote Service 远程服务两种,本地服务只支持同一进程内的应用程序进行访问,远程服务可通过AIDL(Android Interface Definition Language)技术支持跨进程访问.服务可以通过C

王立平--android中的四大组件

Android中称为四大组件的为别为:Activity/Service/BroadCast Recevicer/Content  provider Activity:activity是用户和应用程序交互的窗口,一个activity相当于我们实际中的一个网页,当打开一个屏幕时,之前的那一个屏幕会被置为暂停状态,并且压入历史堆栈中,用户可以通过回退操作返回到以前打开过的屏幕. activity的生命周期:即"产生.运行.销毁",但是这其中会调用许多方法onCreate(创建) .onSta

android基础部分再学习---再谈Service进程服务通信

Bound Services 快速查看 bound服务允许被其它控件绑定,以便与之交互并进行进程间通信 一旦所有的客户端都解除了绑定,bound服务将被销毁.除非该服务同时又是started类型的. 在本文中(参见目录) 关键类 Service ServiceConnection IBinder 范例 RemoteService LocalService bound服务是客户端-服务器模式的服务.bound服务允许组件(比如activity)对其进行绑定.发送请求.接收响应.甚至进行进程间通信(

Android应用程序组件Content Provider在应用程序之间共享数据的原理分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6967204 在Android系统中,不同的应用程序是不能直接读写对方的数据文件的,如果它们想共享数据的话,只能通过 Content Provider组件来实现.那么,Content Provider组件又是如何突破应用程序边界权限控制来实现在不同的应用程序之间共享数据的呢?在前面的文章中,我们已经简要介绍过它是通过 Binder进程间通信机制以

第八章:四大组件之Content Provider

前言 Content Provider——Android四大组件之一. 本文要点 1.Content Provider简介 2.URI简介 3.如何访问Content Provider中数据 一.Content Provider简介 Content Provider,Android四大组件之一.它是Android系统提供的在多个应用之间共享数据的一种机制.一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型

【转】Pro Android学习笔记(五):了解Content Provider(上)

Content Provider是抽象数据封装和数据访问机制,例如SQLite是Android设备带有的数据源,可以封装到一个content provider中.要通过content provider进行读写,需要使用URI.推荐阅读Android学习笔记(四七):Content Provider初谈和Android联系人信息.Android学习笔记(四八):提供自己的Content Provider和Android学习笔记(四九):通过Content Provider访问数据.Content

创建一个内容提供者Creating a Content Provider——翻译总结自developer.android.com

前言 content provider提供了一种访问结构化数据的方式.他通过封装数据进行安全的数据访问.content provider是跨进程访问数据的标准接口. 当你想访问content Provider的数据的时候,使用Context对象中的ContentResolver对象.这个对象和content provider的一个对象进行交互.provider对象接收客户端的查询等请求,并返回结果. 如果你的应用不需要和其他的应用共享数据,那么可以不必开发content provider.但你你