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>
版权声明:本文博主原创文章。博客,未经同意不得转载。
Android四个基本组件(2)之Service 服务与Content Provider内容提供商的更多相关文章
- Android学习之基础知识十—内容提供器(Content Provider)
一.跨程序共享数据——内容提供器简介 内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能 ...
- Android应用程序组件Content Provider简要介绍和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6946067 在Android系统中,Conte ...
- Android 综合揭秘 —— 全面剖释 Service 服务
引言 Service 服务是 Android 系统最常用的四大部件之一,Android 支持 Service 服务的原因主要目的有两个,一是简化后台任务的实现,二是实现在同一台设备当中跨进程的远程信息 ...
- Android 基础 (四大组件,五大存储,六大布局)
Android四大组件: 参考:https://blog.csdn.net/shenggaofei/article/details/52450668 Android四大组件分别为activity.se ...
- Android应用程序组件Content Provider在应用程序之间共享数据的原理分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6967204 在Android系统中,不同的应用 ...
- 第八章:四大组件之Content Provider
前言 Content Provider——Android四大组件之一. 本文要点 1.Content Provider简介 2.URI简介 3.如何访问Content Provider中数据 一.Co ...
- 【转】Pro Android学习笔记(五):了解Content Provider(上)
Content Provider是抽象数据封装和数据访问机制,例如SQLite是Android设备带有的数据源,可以封装到一个content provider中.要通过content provider ...
- [Android学习笔记4]四大应用组件之一:Service 上
一.什么是Service 一个Service就是一个能够在后台执行长时操作的应用程序组件,并且不提供用户界面.一个应用程序组件能够启动一个Service,即使用户切换到另一个应用程序,这个Servic ...
- android关键组件service服务(一)
一. Service简单介绍 Service是android 系统中的四大组件之中的一个(Activity.Service.BroadcastReceiver.ContentProvider),它跟A ...
随机推荐
- Linux 从core信息中找到TLS信息
背景 我们在查core问题时,有时候须要查看某个TLS变量的值.可是GDB没有提供直接的命令,或者我不知道.这篇文字的目的.就是想办法从core文件里找出某个线程存放TLS变量的内容. 依据 Linu ...
- [D3] Debug D3 v4 with Dev Tools
Since D3 outputs standard markup, you can use familiar dev tools and inspectors to debug your visual ...
- 为easyUI的dataGrid加入自己的查询框
dataGrid作为easyUI的一个核心组件,其功能上是非常强大的. 可是外观上似乎就有点差强人意了,首先说一下我对dataGrid外观的2点感受 1.图标不好看,且尺寸非常小(16x16)-- 关 ...
- 自己写的Android图表库XCL-Charts一些旧的样例
话说有了灵感就要抓住,来了兴趣就要去研究它. 所以尽管近期非常忙.但我还是没有丢下Android图表实现的研究.最终如今我的图表库基类 基本上已经有点模样了.不在是小打小闹,而是能依传入參数非常灵活的 ...
- PHP模拟链表操作
PHP模拟链表操作 一.总结 1.类成员用的是-> 2.对象节点相连的话,因为是对象,所以不用取地址符号 3.数组传递参数的时候传引用的方法 ,& 二.PHP模拟链表操作 代码一: /* ...
- POJ 3468 A Simple Problem with Integers 线段树区间修改
http://poj.org/problem?id=3468 题目大意: 给你N个数还有Q组操作(1 ≤ N,Q ≤ 100000) 操作分为两种,Q A B 表示输出[A,B]的和 C A B ...
- softmax 与 sigmoid & softmax名字的由来
Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广. 参考:http://blog.csdn.net/u014422406/article/details/52805924 ...
- rz、sz (上传下载)命令参数的解释
$ man rz,查看帮助: -a, –ascii -b, –binary 用binary的方式上传下载,不解释字符为 ascii -e, –escape 强制escape 所有控制字符,比如 Ctr ...
- Java与模式:装饰(Decorator)模式
装饰模式使用被装饰类的一个子类的实例.把client的调用委派到被装饰类,装饰模式的关键在于这样的扩展是全然透明的. 装饰模式在Java种使用也非常广泛,比方我们在又一次定义button.对话框等 ...
- arm-linux-gcc: Command not found
老是提示arm-linux-gcc找不到,但是确实是装好了,其实是权限的问题,Ubuntu没有root权限,刚开始用碰到很多麻烦,查了好多资料,终于把arm-linux-gcc: Command no ...