服务

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

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

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

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

我们平时听歌的时候,玩手机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. CSS3 background-image背景图片相关介绍

    这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...

  2. .Net多线程编程—System.Threading.Tasks.Parallel

    System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Parallel.For,Parallel.ForEach这三个静态方法. 1 Parallel. ...

  3. c#语言规范

    0x00 分类 C#语言规范主要有两个来源,即我们熟知的ECMA规范和微软的规范.尽管C#的ECMA规范已经前后修订4次,但其内容仅仅到C# 2.0为止.所以慕容为了方便自己和各位方便查询,在此将常见 ...

  4. css3更改input单选和多选的样式

    在项目开发中我们经常会遇到需要更改input单选和多选样式的情况,今天就给大家介绍一种简单改变input单选和多选样式的办法. 在这之前先简单介绍一下:before伪类 :before 选择器向选定的 ...

  5. VIM教程

    vim 的环境设定参数 :set nu :set nonu             就是设定与取消行号啊! :set hlsearch :set nohlsearch     hlsearch 就是 ...

  6. 机器指令翻译成 JavaScript —— No.2 跳转处理

    上一篇,我们发现大多数 6502 指令都可以直接 1:1 翻译成 JS 代码,但除了「跳转指令」. 跳转指令,分无条件跳转.条件跳转.从另一个角度,也可分: 静态跳转:目标地址已知 动态跳转:目标地址 ...

  7. Mono 3.2.7发布,JIT和GC进一步改进

    Mono 3.2.7已经发布,带来了很多新特性,如改进的JIT.新的面向LINQ的解释器以及使用了64位原生指令等等. 这是一次主要特性发布,累积了大约5个月的开发工作.看上去大部分改进都是底层的性能 ...

  8. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  9. 开源一个WEB版本GEF,基于SVG的网页流程图框架

    8月开始断断续续的制作这个web gef,没有任何依赖,完全原生js开发,目前已经完成了雏形,基本上可以在项目里应用了. 下图展示的是demo1的效果,包括拖拽,生成连线,点击生成\取消墙体,整个de ...

  10. 安全防范:nginx下git引发的隐私泄露问题

    安全防范:nginx下git引发的隐私泄露问题 1   安全事件 最近阿里云服务器后台管理系统中收到一条安全提示消息,系统配置信息泄露: http://my.domain.com/.git/confi ...