mono for android学习过程系列教程(3)
服务
接着上一讲的内容,咱们继续来唠叨概念性的东西。服务,内容提供器,广播接收器等理论知识。
首先是服务,它不是一个可视化的组件或者视图。他是由我们开发人员来定义,可以一直一直运行
的工作单元。跟活动的差别在于:它没有可视化组件,它的运行不会依赖于应用程序用户。
服务用来做什么的呢?我们第一反应应该会是这个;让我们慢慢来解开她的衣服探索一下。
我们平时听歌的时候,玩手机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)的更多相关文章
- mono for android学习过程系列教程(1)
直接进入主题,关于mono for android的学习,首先配置好环境,如何配置环境,度娘谷歌一大堆,记得使用破解版. 我自己是百度“黑马四期”传智播客的视频,里面有破解版开发环境的软件. 今天直接 ...
- mono for android学习过程系列教程(2)
接着上一讲继续开始写,今天介绍的是安卓的基本组成结构. 在大多数情况下,MONO FOR ANDROID的命名空间和Android的命名空间 是互相映射的.有时候需要大小写,非字母数字字符的用法以及名 ...
- mono for android学习过程系列教程(7)
首先说个抱歉,这段时候由于个人原因未及时更新博客.故此今天先给大家来个小料. 以后会及时更新我自己的学习过程. 不多说,终于私人生活安定下来了,可以安心学习.直接进入主体: 今天咱们摒弃所有的前面的知 ...
- mono for android学习过程系列教程(4)
今天要讲的事情是构建安卓程序的UI界面. 首先给大家上点小点心,如图: 上面就是我们界面的设计模块,仔细看中间大块的下方,有一个Source,这就类似webform里面的设计和源代码界面. 在这个页面 ...
- mono for android学习过程系列教程(5)
这一讲主要需要了解的安卓UI元素是Spinner.这个元素类似我们 winform和webform里面的下拉选项. 首先我们先建立一个新的项目,命名为SpinnerExample. 然后在Layout ...
- mono for android学习过程系列教程(6)
接着上一讲,今天讲的是Button,CheckBox这二个安卓元素, 我们来看第一个Button这个控件,类似winform和webform里面一样,它也是 存在有触发事件的,我们新建初始化项目直接就 ...
- [转]Android Studio系列教程六--Gradle多渠道打包
转自:http://www.stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ Android Studio系列教程六--Grad ...
- 【Android进阶系列教程】前言
起因 因为初学Android的时候还没有写博客的意识,现在Android的门是入了,正在进阶的道路上行走,但是就这一路也走了不少的弯路.我想,总得来说Android入门还是比较容易的,网络资源比较丰富 ...
- Android Studio系列教程六--Gradle多渠道打包
Android Studio系列教程六--Gradle多渠道打包 2015 年 01 月 15 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzh ...
随机推荐
- 由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序
异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 今天帮群友整理Dapper基础教程的时候手脚快了点,然后遇到了一个小问题,Dapp ...
- Power BI官方视频(3) Power BI Desktop 8月份更新功能概述
Power BI Desktop 8月24日发布了更新版本.现将更新内容翻译整理如下,可以根据后面提供的链接下载最新版本使用. 1.主要功能更新 1.1 数据钻取支持在线版 以前的desktop中进行 ...
- JavaScript基础知识总结(四)
JavaScript语法 八.函数 函数就是完成某个功能的一组语句,函数由关键字function + 函数名 + 加一组参数定义: 函数在定义后可以被重复调用,通常将常用的功能写成一个函数,利用函数可 ...
- 分享两个BPM配置小技巧
1.小技巧 流程图修改后发布的话版本号会+1,修改次数多了之后可能会导致版本号很高,这个时候可以将流程导出,然后删除对应的流程包再导入,发布数据模型和流程图之后,版本清零 2.小技巧 有的同事入职后使 ...
- 编译器开发系列--Ocelot语言4.类型定义的检查
这里主要介绍一下检查循环定义的结构体.联合体.是对成员中包含自己本身的结构体.联合体进行检查.所谓"成员中包含自己本身",举例来说,就是指下面这样的定义. struct point ...
- Android6.0运行时权限管理
自从Android6.0发布以来,在权限上做出了很大的变动,不再是之前的只要在manifest设置就可以任意获取权限,而是更加的注重用户的隐私和体验,不会再强迫用户因拒绝不该拥有的权限而导致的无法安装 ...
- iOS app内存分析套路
iOS app内存分析套路 Xcode下查看app内存使用情况有2中方法: Navigator导航栏中的Debug navigator中的Memory Instruments 一.Debug navi ...
- ubuntu15.04 nginx1.6.5 配置虚拟主机
1 在/etc/hosts 添加host 2 在/etc/nginx/nginx.conf中查看http里的include ****** /*.conf的路径,在此路径下添加一个新的******. ...
- centos 6.5 升级php
1>追加CentOS 6.5的epel及remi源. # rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-re ...
- AOP之Castle DynamicProxy 动态代理
这里主要介绍使用castle这个动态代理,在.net一些开源的框架里可以找到它的影子,就连微软的rchard也是使用这个进行方法拦截等可以基于这个进行方法拦截,在这个方面PostSharp算是比较好用 ...