服务

接着上一讲的内容,咱们继续来唠叨概念性的东西。服务,内容提供器,广播接收器等理论知识。

首先是服务,它不是一个可视化的组件或者视图。他是由我们开发人员来定义,可以一直一直运行

的工作单元。跟活动的差别在于:它没有可视化组件,它的运行不会依赖于应用程序用户。

服务用来做什么的呢?我们第一反应应该会是这个;让我们慢慢来解开她的衣服探索一下。

我们平时听歌的时候,玩手机QQ。或者UC在下载的时候,下载完成之后会有一个提示。这样类似的

种种任务都可以作为一个服务来运行。它是我们看不到的,比较抽象,但是在平时的手机应用程序中

我们却经常可以感受到它的身影,再举个例子,比如闹钟到点了自动会触发手机音乐响起。这也是服务

的一种使用。服务也可以在我个人理解来看相当于一种定时任务一样一样的。

服务在另一种理解上看,它的作用可以将它想象成一个后台服务。他不能和其他的应用程序组件相比。

换句话说,服务就是安卓的主要劳动力。通过使用服务,比如有的任务需要请求资源,请求网络,服务

就可以来将任务进行排队。服务同时也是对其他应用程序公开任务的一种方法,方便这些应用程序可以跟

特定的工作进行交互。服务也是处理一个重复或者正在进行的任务非常好的办法。典型的有发送邮件程序等。

服务的使用一定要另外申明一个线程,不要使用主线程,使得画面不够流畅。以后在继续深入服务。

内容提供器

接下来讲内容提供器。

首先,他是很多程序共享数据首要选取的方法。可以把它认为一种大家一起使用的公共的数据储存类型。它可以

让开发人员公开一些需要被查询的数据或者被一些程序使用特定的数据集。安卓程序没有很好的数据存储机制,因此

内容提供器是创建通用数据池很好的方法。

内容提供器所具备的灵活性可以让开发人员针对数据的不同子集定义一个或多个数据集。它可以满足你所指定的安全标准

的应用程序共享其他相关数据。此外,内容提供器还可以实现对每个数据集不同的操作。比如一些数据的只读,或者

写入数据等操作。这些数据被公开,它的优势在于用户可以选择希望的应用程序来管理他们的数据,而不必一定适用本机的

应用程序。

内容提供器包括:常见的AlarmClock,Brower,CallLog,ContactsContract,MediaStore,Settings,UserDictionary.

他们分别是,提供对系统报警始终这个程序的访问权限,从而允许不同的应用程序设置报警时间和模式,比如振铃等。

第二个是类似一个搜索功能,第三个是查看手机联系人数据,甚至可以修改,第四个是安卓上通用的媒体文件程序访问。

第五个是安卓的全局设置功能,最后一个是用户自定义数据单词,并进行存储。

在Android.Provider的命名控件的安卓文档中可以找到所用的默认内容提供器列表。

在我们学习内容提供器的时候,我们需要学习并记住的是它的工作方式。

不论是系统提供的还是自己创建的提供器,并不是通过直接访问内容提供器来实现访问的。

安卓平台通过利用一个中介对象来统一的当前和将来的所有访问,而不是为访问方法提供N个不同的内容提供器。

换种说法,ContentResolver对象是负责处理与内容提供器交互的,他是一个可以充当数据存储的中介。这个方法

简化了内容提供器中数据的使用,这里可以确保内容提供器都是平等的。

这里就有另外一种概念了,内容解析器。内容解析器需要遵守两个基本规则。

所有的内容存储都需要有一个唯一的URI,它提供了查找所需要访问的内容提供器唯一方法,这个URI还可以带上参数

当作条件来查询特定的数据集。

第二个规则是基类ContentProvider定义了可实现的内容提供器上执行所有的可能的操作。在自己编写自定义提供器时,

由我们自己来定义提供器的逻辑,即确认需要写什么方法。这种方法的优势在于你知道如何链接上一个提供器,那就可以

连接到任何提供器上,但是缺点在于没有权限编写自己的访问方法。不过ContentProvider具备了修补该缺点存在。

contentResolver有五个常用的五个函数。Query(),update(),insert(),delete(),getType().

第一个方法接受针对提供器URI,选择字符串,选择参数以及结果排序顺序的参数,用来返回目标结果集的指针。

update()接受针对提供器的URI,新字段的值,以及具体更新的行过滤器的参数,返回Update()语句影响的行数。

insert()接受针对提供器的URI,选择字符串,选择参数的参数。该函数返回新插入项的URI

delete()接受针对提供器的URI,选择字符串,选择参数的参数。该函数返回影响的行数

getType()接受针对提供器URI的参数,该函数返回内容提供器中存储的数据文本的MIME类型。(MIME类型就是文件的后缀扩展名)

内容提供器主要了解他的工作方式以及记住使用的几个函数即可,后续篇章继续深入。

广播接收器

接下来讲最后一个广播接收器,说的很直白点,广播接收器就类似我们监控系统。通过监听事件做出相应的程序组件。

广播播放器可以对特定的事件进行监听,如果必要,还可以在响应的时候启动活动和服务。他跟服务有一定的相似之处。他们

没有任何用户界面。其次,都是用于完成任务。而不同之处在于广播用来监听消息类型,并针对启动适当的相应。

接下来介绍比较重要的概念,组建之间的通讯:安卓意图(android意图)

这是用来安卓应用程序组件之间的交互,通过使用意图可以启动新任务或者新活动来交互。

可以通过意图来初始化一个新服务,或者对一个进行中的服务传递数据实现交互。

还可以通过意图来充当消息广播的中介实现来进行交互。

意图是对完成某项任务所需要的细节的抽象。一个意图可以存储多个信息块-接受对方组件执行的指令。

如果一旦接受到一个意图,则由该接收器来确定如何相应,如何利用意图中的数据来完成接下来的操作。

还有一个重要的概念是绑定组件,名为安卓清单。他就是类似winform里面的aapconfig以及webform里面的

web.config文件。它是用来控制程序的一些权限,或者设置唯一软件包的名称,最低版本的sdk。应用程序主题,

以及程序版本。

该文件通过规定那些意图消息与某个程序组件绑定来描述该组件的功能。

还可以定义应用程序必须操作的其他代码库。

今天的内容就到这里了,比较枯燥无味。下一将开始将要讲解一些ui控件。尽请期待...

转载请附带联系人Q-高卿   QQ1466358067

mono for android学习过程系列教程(3)的更多相关文章

  1. mono for android学习过程系列教程(1)

    直接进入主题,关于mono for android的学习,首先配置好环境,如何配置环境,度娘谷歌一大堆,记得使用破解版. 我自己是百度“黑马四期”传智播客的视频,里面有破解版开发环境的软件. 今天直接 ...

  2. mono for android学习过程系列教程(2)

    接着上一讲继续开始写,今天介绍的是安卓的基本组成结构. 在大多数情况下,MONO FOR ANDROID的命名空间和Android的命名空间 是互相映射的.有时候需要大小写,非字母数字字符的用法以及名 ...

  3. mono for android学习过程系列教程(7)

    首先说个抱歉,这段时候由于个人原因未及时更新博客.故此今天先给大家来个小料. 以后会及时更新我自己的学习过程. 不多说,终于私人生活安定下来了,可以安心学习.直接进入主体: 今天咱们摒弃所有的前面的知 ...

  4. mono for android学习过程系列教程(4)

    今天要讲的事情是构建安卓程序的UI界面. 首先给大家上点小点心,如图: 上面就是我们界面的设计模块,仔细看中间大块的下方,有一个Source,这就类似webform里面的设计和源代码界面. 在这个页面 ...

  5. mono for android学习过程系列教程(5)

    这一讲主要需要了解的安卓UI元素是Spinner.这个元素类似我们 winform和webform里面的下拉选项. 首先我们先建立一个新的项目,命名为SpinnerExample. 然后在Layout ...

  6. mono for android学习过程系列教程(6)

    接着上一讲,今天讲的是Button,CheckBox这二个安卓元素, 我们来看第一个Button这个控件,类似winform和webform里面一样,它也是 存在有触发事件的,我们新建初始化项目直接就 ...

  7. [转]Android Studio系列教程六--Gradle多渠道打包

    转自:http://www.stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ Android Studio系列教程六--Grad ...

  8. 【Android进阶系列教程】前言

    起因 因为初学Android的时候还没有写博客的意识,现在Android的门是入了,正在进阶的道路上行走,但是就这一路也走了不少的弯路.我想,总得来说Android入门还是比较容易的,网络资源比较丰富 ...

  9. Android Studio系列教程六--Gradle多渠道打包

    Android Studio系列教程六--Gradle多渠道打包 2015 年 01 月 15 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzh ...

随机推荐

  1. HTML 简单的介绍

    Q: 什么是HTML? A: HTML 是一种超文本标记语言. 所谓的超文本是指指页面内可以包含图片,链接,甚至音乐.程序等非文字元素.超文本标记语言的结构包括"头"部分(英语:H ...

  2. 20169212《Linux内核原理与分析》第五周作业

    关于linux内核源码 两个很关键的目录,一个是arch(architecture),支持不同cpu体系架构的源代码,其中最重要的就是x86(一般把x86留下,其他的目录删掉),另一个是init(其中 ...

  3. C# 对象转换为byte[] ,byte[]还原对象

    /// <summary>  /// 将一个object对象序列化,返回一个byte[]          /// </summary>  /// <param name ...

  4. git 放弃本地修改 强制更新

    git reset --hard origin/master

  5. java 11-8 在大串中查找小串的案例

    1.统计大串中小串出现的次数 举例: 在字符串"woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun& ...

  6. 「ruby」使用rmagick处理图像

    安装rmagick gem A new release 2.13.2 of RMagick is now available on github as well as rubygems. This r ...

  7. [ios]iOS 图形编程总结

    转自:http://www.cocoachina.com/ios/20141104/10124.html iOS实现图形编程可以使用三种API(UIKIT.Core Graphics.OpenGL E ...

  8. CSS3弹性盒模型之box-flex

    对于之前讲过的box-sizing属性,对于页面布局很有用,但是突然发现它依然存在一些问题,前面例子中不会存在问题,不代表它没有问题.如果元素的个数整除100%的时候呢,比较3个元素,那么第一个盒子的 ...

  9. ansible高级用法

    将多个符合正则的文件拷贝到目标机器 - name: Copy copy: src={{ item }} dest=/root/.sshkeys mode=0600 owner=root group=r ...

  10. bootstrap插件之Carousel

    兼容:ie9以上 特点:滑动图片看起来永远只有两帧,过度完美:是html css js的完美配合:其中html的data属性起了关键性作用 前提:normalize.css  jquery.js ht ...