服务

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

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

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

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

我们平时听歌的时候,玩手机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. 初探Vue

    Vue.js(读音/vju:/,类似于view),是近来比较火的前端框架,但一直没有怎么具体了解.实现过,就知道个啥的MVVM啦,数据驱动啦,等这些关于Vue的虚概念. 由于最近,小生在公司中,负责开 ...

  2. 关于python的bottle框架跨域请求报错问题的处理

    在用python的bottle框架开发时,前端使用ajax跨域访问时,js代码老是进入不了success,而是进入了error,而返回的状态却是200.url直接在浏览器访问也是正常的,浏览器按F12 ...

  3. JS实现页面进入、返回定位到具体位置

    最为一个刚入职不久的小白...慢慢磨练吧... JS实现页面返回定位到具体位置 其实浏览器也自带了返回的功能,也就是说,自带了返回定位的功能.正常的跳转,返回确实可以定位,但是有些特殊场景就不适用了. ...

  4. 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)

    转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...

  5. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  6. CSS 3学习——transition 过渡

    以下内容根据官方规范翻译以及自己的理解整理. 1.介绍 这篇文档介绍能够实现隐式过渡的CSS新特性.文档中介绍的CSS新特性描述了CSS属性的值如何在给定的时间内平滑地从一个值变为另一个值. 2.过渡 ...

  7. Java定时任务的常用实现

    Java的定时任务有以下几种常用的实现方式: 1)Timer 2)ScheduledThreadPoolExecutor 3)Spring中集成Cron Quartz 接下来依次介绍这几类具体实现的方 ...

  8. 微信小程序前端源码逻辑和工作流

    看完微信小程序的前端代码真的让我热血沸腾啊,代码逻辑和设计一目了然,没有多余的东西,真的是大道至简. 废话不多说,直接分析前端代码.个人观点,难免有疏漏,仅供参考. 文件基本结构: 先看入口app.j ...

  9. 使用HttpClient的优解

    新工作入职不满半周,目前仍然还在交接工作,适应环境当中,笔者不得不说看别人的源码实在是令人痛苦.所幸今天终于将大部分工作流畅地看了一遍,接下来就是熟悉框架技术的阶段了. 也正是在看源码的过程当中,有一 ...

  10. listview下拉刷新和上拉加载更多的多种实现方案

    listview经常结合下来刷新和上拉加载更多使用,本文总结了三种常用到的方案分别作出说明. 方案一:添加头布局和脚布局        android系统为listview提供了addfootview ...