服务

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

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

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

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

我们平时听歌的时候,玩手机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. category中重写方法?

    问:可以在category中重写方法吗? 答:代码上可以实现 在category中重写方法,但在实际开发中,不建议这样做.如果确实需要重写原有方法也建议使用子类进行重写. category是为了更方便 ...

  2. JavaScript常见的五种数组去重的方式

    ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...

  3. 第一个移动前端开源项目-dailog

    你还在为手机上没有忙碌光标而发愁吗?你还在抱怨弹出框组件要依赖zepto/jqery吗?你还在纠结是否要自己写一套还是去网上寻找成现成的UI组件吗?YouA为你轻松解决所有烦恼.YouA是我为移动前端 ...

  4. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测

    目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...

  5. 使用SecureCRT连接虚拟机(ubuntu)配置记录

    这种配置方法,可以非常方便的操作虚拟机里的Linux系统,且让VMware在后台运行,因为有时候我直接在虚拟机里操作会稍微卡顿,或者切换速度不理想,使用该方法亲测本机效果确实ok,特此记录. Secu ...

  6. Linux常用命令操作

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  7. 【转】为什么我们都理解错了HTTP中GET与POST的区别

    GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...

  8. ABP创建数据库操作步骤

    1 ABP创建数据库操作步骤 1.1 SimpleTaskSystem.Web项目中的Web.config文件修改数据库配置. <add name="Default" pro ...

  9. java设计模式之单例模式(几种写法及比较)

    概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...

  10. Mysql - 函数

    Mysql提供的函数是在是太多了, 很多我都见过, 别说用了. 园子里面, 有人弄了一个比较全的. MYSQL函数 我这里会将他写的完全拷贝下来, 中间会插入一些自己项目中使用过的心得 一.数学函数 ...