【VC++开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了VC++开源代码-Android系统中Intent功能研究 - 网络与通信的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
1 Android系统中Intent功能研究 队别:二系一队 姓名:王阿成 要 随着高科技的迅速发展手机在人的日常生活中已经成为不可或缺的一部分尤其是智能手机功能很全面其中手机系统也五花八门但近年来Android呈为最热门的其中之一其完全开放的
代码允许第三方修改这在很大程度上容许厂家根据自己的硬件更改版本从而能够更好的适应硬件与之形成良好的结合。
相比于苹果的封闭
开源能够提供更好的安全性能也给开发人员提供了一个更大的创新空间也使得Android系统炙手可热。
我们先对Android系统进行了整体的介绍作为炙手可热的手机系统不只是手机系统在平板电脑上也有应用Android有着很高的优越性。
Android系统从底向上一共分了4层Linux内核、核心库和运行时libraries amp Android runtime、应用程序框架Application Framework和应用程序Application。
而开发框架主要是应用功能开发其中应用功能开发包括Activity、Broadcast Intent Receiver、Service、Content Provider这四大Android组件。
将这个四个组件有机结合在一起正常工作就需要引入Intent这一纽带说是纽带可能也不太恰当只有通过Intent的协调和数据的传递才能使四个基本组件之间相互调用协调
工作。
Intent对象抽象地描述了要执行的操作其描述的基本内容可以分为组件名称、Action动作、Data数据、Category类别、Extra附加信息和Flag标志位6部分。
最后对Android的UI界面的优化有一些简单的想法。
关键词: AndroidIntentUI设计。
2 目录 一 Android系统简介 ............................................................................................. 3 1.1 Android的由来 ............................................................................................ 3 1.2 Android的优越性 ........................................................................................ 3 1.2.1 开放性 ............................................................................................. 3 1.2.2 应用程序平等 ................................................................................... 3 1.2.3 应用间无界限.................................................................................. 3 1.2.4、应用程序发展迅速 .......................................................................... 3 二 Android系统构架和开发架构 ............................................................................ 4 2.1 Android系统构架 ........................................................................................ 4 2.1.1 Linux内核Linux Kernel ..................................................................... 4 2.1.2中间件 ................................................................................................ 4 2.1.3应用程序框架Application Framework .............................................. 4 2.1.4应用程序 Applications ..................................................................... 4 2.2 Android系开发架构.................................................................................. 5 2.2.1 Activity——应用表示层基类Activity ................................. 5 2.2.2 Broadcast Intent Receiver ................................................................. 5 2.2.3. Service ......................................................................................... 5 2.2.4 Content Provider .............................................................................. 5 三 Intent的相关功能研究 ....................................................................................... 6 3.1 Intent简介 ................................................................................................... 6 3.2 Intent内容 ................................................................................................... 6 3.2.1 组件 ................................................................................................... 6 3.2.2 Action.................................................................................................. 6 3.2.3 Data .................................................................................................... 6 3.2.4 Category .............................................................................................. 7 3.3 Intent解析机制 ........................................................................................... 7 3.4 Intent的具体应用——TinyDialer ................................................................ 7 四 Android的UI优化 .............................................................................................. 9 4.1性能的优化 .................................................................................................. 9 4.2布局的优化 .................................................................................................. 9 4.3 Adapter的优化 ............................................................................................ 9 五 心得体会与建议 ............................................................................................... 10 5.1 学习Android的体会................................................................................. 10 5.2对于初学者的一点建议 ............................................................................. 11 六 结束语 ............................................................................................................ 11 3 一 Android系统简介 1.1 Android的由来 2011年数据显示仅正式上市两年的操作系统Android已经超越称霸十年的塞班系统使之跃居全球最受欢迎的智能手机平台。
现在Android系统不但应用于智能手机也在平板电脑市场急速扩张。
Android是基于Linux开放性内核的操作系统是Google公司在2007年11月5日公布的手机操作系统。
早期由原名为quotAndroidquot的公司开发谷歌在2005年收购quotAndroid.Incquot后继续对Android系统开发运营。
Android 是一个真正意义上的开放性移动设备综合平台。
它包括操作系统、用户界面和应用程序 移动电话工作所需的全部软件而且不存在任何以往阻碍移动产业创新的专有权障碍。
谷歌与开放手机联盟合作开发了 Android这个联盟由包括中国移动、摩托罗拉、高通、宏达和 T-Mobile 在内的 30 多家技术和无线应用的领军企业组成。
通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系希望借助建立标准化、开放式的移动电话软件平台在移动产业内形成一个开放式的生态
系统。
1.2 Android的优越性 1.2.1 开放性 在优势方面Android平台首先就是其开放性开发的平台允许任何移动终端厂商加入到Android联盟中来。
显著的开放性可以使其拥有更多的开发者随着用户和应用的日益丰富一个崭新的平台也将很快走向成熟。
Google与OHA合作开发Android目的是通过与运营商、设备厂商、开发商等等结成深层次的合作伙伴来建立标准化的开放式的移动电话软件平台。
另一方面 Android平台的开放性还体现在不同的厂商可以根据自己的需求进行定制和扩展以及这个平台无需任何费用。
1.2.2 应用程序平等 所有的Android应用程序之间是完全平等的。
在开发之初Android平台就被设计成一个有一系列应用所组成的平台所有的应用都运行在一个核心的引擎上面这个引擎就是一个虚拟机它提供了一系列用于应用和硬件资源的进行通讯的API。
撇开这个核心引擎Android的所有其他的东西包括系统的核心应用和第三方应用都是完全平等的。
因此用户可以将系统中默认的电话拨号软件替换成其他第三方的电话拨号
软件你也可以改变主界面显示窗口的内容或者将手机中任意应用软件替换成你需要的其他软件。
1.2.3 应用间无界限 如今叱咤互联网的Google已经走过10年度历史。
从搜索巨人到全面的互联网渗透Google服务如地图、邮件、
搜索等已经成为连接用户和互联网的重要纽带而Android平台手机将无缝结合这些优秀的Google服务。
1.2.4、应用程序发展迅速 智能机玩的就是个应用虽然现在Android的应用还无法与苹果相竞争但4 是随着Android的推广与普及应用程序数在成数量级增长Android应用在可预见的未来是有能力与苹果相竞争的。
而来自Android应用商店最大的优势是不对应用程序进行严格的审查。
在这一点上优于苹果。
二 Android系统构架和开发架构 2.1 Android系统构架 Android系统从底向上一共分了4层每一层都把底层实现封装并暴露调用接口给上一层。
具体结构如下图1所示 图1 Android系统架构图 2.1.1 Linux内核Linux Kernel Android运行在linux kernel 2.6之上但是把
linux内受GNU协议约束的部分做了取代 Linux 内核是硬件和软件层之间的抽象层。
2.1.2中间件 中间件包括两部分核心库和运行时libraries amp Android runtime 核心库包括SurfaceManager 显示系统管理库负责把2D或3D内容显示到屏幕Media Framework 媒体库负责支持图像支持多种视频和音频的录制和回放SQlite 数据库一个功能强大的轻量级嵌入式关系数据库WebKit 浏览器引擎等。
2.1.3应用程序框架Application Framework Android的应用程序框架为应用程序层的开发者提供APIs它实际上是一个应用程序的框架。
由于上层的应用程序是以JAVA构建的 因此本层次提供的首先包含了UI程序中所需要的各种控件例如 Views 视图组件包括 lists
列表 grids栅格 text boxes文本框 buttons按钮等。
甚至一个嵌入式的Web浏览器。
还有内容提供者Content Providers、资源管理器Resource Manager、通知管理器Notification Manager和活动管理器 Activity Manager。
2.1.4应用程序 Applications Android 系统会内置一些应用程序包括email 客户端SMS 短消息程序地图浏览器联系人管理程序等。
所有的应用程序都是使用JAVA 语言编写的。
5 2.2 Android系开发架构 一般而言一个标准的Android程序由如下4部分组成即Activity、Broadcast Intent Receiver、Service、Content Provider先对这四个组件分别作如下简要介绍 2.2.1 Activity——应用表示层基类Activity Android系统中的活动Activity和桌面操作系统中的独立的应用程序类似活动都是以一些可执行
代码组成的用户编写的大部分可执行
代码都是以Activity的形式存在。
Activity类中主要是跟界面资源文件关联起来res/layout目录下的xml资源也可以不含任何界面资源内部包含控件的显示设计、界面交互设计、事件的响应
设计以及数据处理设计、
导航设计等application设计的方方面面。
2.2.2 Broadcast Intent Receiver Intent提供了各种不同Activity进行跳转的机制譬如如果从A activity跳转到B activity使用Intent来实现如下 Intent in new IntentA.this B.class startActivityin BroadcastReceiver提供了各种不同的Android应用程序进行进行进程间通讯的机制譬如当电话呼叫来临时可以通过BroadcastReceiver发布广播消息。
对于用户而言BroadcastReceiver是不透明的用户无法看到这个事件BroadcastReceiver通过NotificationManager来通知用户这些事件发生了它既可以在资源AndroidManifest.xml中注册也可以在
代码中通过Context.registerReceiver进行注册只要是
注册了当事件来临的时候即时
程序没有启动系统也在需要的时候会自动启动此应用程序另外各应用程序很方便地通过Context.sendBroadcast将自己的事情广播给其他应用程序 2.2.3. Service 跟Windows当中的Service完全是一个概念用户可以通过start ServiceIntent service启动一个Service他们启动后就一直在后台运行知道手机设备关机为止。
2.2.4 Content Provider 由于Android应用程序内部的数据都是私有的Content Provider提供了应用程序之间数据交换的机制一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据暴露出去并且隐蔽了具体的数据存储实现标准的ContentProvider提供了基本的CRUDCreateReadUpdateDelete的接口并且实现了权限机制保护了数据交互的安全性。
一个标准的Android应用程序的工程文件我们要做的主要有下面几部分 -gt Java源
代码部分包含Activity都在src目录当中 -gt res目录放置的是资源文件跟
VC中的资源目录基本类似其中的drawable包含的是图片文件layout里面包含的是布局文件values目录里面主要包含的是字符串strings.xml、颜色colors.
xml以及数组arrays.xml资源 -gt AndroidManifest.xml这个文件异常重要是整个应用的配置文件6 在这个文件中需要声明所有用到的Activity、Service、Receiver等。
三 Intent的相关功能研究 3.1 Intent简介 在一个Android应用中主要是由ActivityServiceBroadcast ReceiverContent Provider四种组件组成的而这四种组件是独立的它们之间可以互相调用协调工作最终组成一个真正的Android应用。
在这些组件之间的通讯中主要是由Intent协助完成的。
Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述Android则根据此Intent的描述负责找到对应的组件将 Intent传递给调用的组件并完成组件的调用。
因此Intent在这里起着一个媒体中介的作用专门提供组件互相调用的相关信息实现调用者与被调用者之间的解耦。
Intent是一种运行时绑定run-time binding机制它能在程序运行的过程中连接两个不同的组件。
通过Intent你的程序可以向Android表达某种请求或者意愿Android会根据意愿的内容选择组件来完成请求。
比如有一个Activity希望打开网页浏览器查看某一网页的内容那么这个Activity只需要发出WEB_SEARCH_ACTION请求给AndroidAndroid会根据Intent的请求内容
查询各组件注册时声明的IntentFilter找到网页浏览器Activity来浏览网页。
3.2 Intent内容 Intent对象抽象地描述了要执行的操作其描述的基本内容可以分为组件名称、Action动作、Data数据和Category类别。
3.2.1 组件 组件名称是指Intent目标组件的名称。
组件名称是一个ComponentName对象这种对象名称是目标组件类名和目标组件所在应用程序的包名的组合。
组件中包名不一定要和manifest文件中的包名完全匹配。
组件名称是一个可选项。
如果Intent消息中指明了目标组件的名称这就是一个显式消息Intent会传递给指明的组件。
如果目标组件名称并没有指定Android则通Intent内的其他信息和已注册的IntentFilter的比较来选择合适的目标组件。
3.2.2 Action Action描述Intent所触发动作名字的字符串对于Broadcast Intent来说Action指被广播出去的动作。
理论上Action可以为任何字符串而与Android系统应用有关的Action字符串以静态字符串常量的形式定义在了Intent类中。
3.2.3 Data Data描述Intent要操作的数据URI和数据类型。
有的动作需要对相应的数据进行处理。
比如对于动作ACTION_EDIT来说它的数据可以为联系人、短信息等可编辑的URI。
而对于ACTION_CALL来说它的数据可以是一个tel://格式的电话号码URI。
正确设置Intent的数据对于Android寻找系统中匹配Intent请求的组件很重要。
如果你使用了ACTION_CALL但是你的数据却设置成了mail to://格式的URI那么你所期望的“启动打电话应用程序”这一动作会因为没有与之相对应的应用程序而不会被执行。
所以每次使用Intent时我们都应该7 留意与设置的Action相关的数据类型和格式。
3.2.4 Category Category是对被请求组件的额外描述信息。
Android也在Intent类中定义了一组静态字符串常量表示Intent不同的类别 3.3 Intent解析机制 对于明确指出了目标组件名称的Intent我们称之为“显式Intent”。
对于没有明确指出目标组件名称的Intent则称之为“隐式Intent”。
Android系统使用Intent Filter 来寻找与隐Intent相关的对象. 显式Intent直接用组件的名称定义目标组件这种方式很直接。
但是由于开发人员往往并不清楚别的应用程序的组件名称因此显式Intent更多用于在应用程序内部传递消息。
比如在某应用程序内一个Activity启动一个Service。
Intent intent new Intent intent.putExtraquotnamequot editText.getText.toString intent.setClassActivityLifecycle.this AlertDialog.class 通过setClass方法直接告诉Android此Intent交由AlertDialog处理。
也可以通过setComponent、setClassName等方法来做同样的事情。
隐式Intent呢比较含蓄比较糊涂比较模糊还没有明确的目标并且比较悲观不会对对方提一些要求只是描述了一下自己的情况意思就是说我就是我所描述的这样的一个人谁能接受 谁就可以应征。
Intent说明自己的方式有action 用来指明执行的动作比如说ACTION_VIEW ACTION_EDIT这都是在Android中定义的标准action开发者可以自己定义自己需要的action用字符串来表示。
清楚了显式Intent和隐式Intent的概念后我们再来看看决定Intent目标组件的因素。
在显式Intent消息中决定目标组件的唯一要素就是组件名称因此如果你的Intent中已经明确定义了目标组件的名称那么你就完全不用再定义其他Intent内容。
而对于隐式Intent则不同由于没有明确的目标组件名称所以必须由Android系统帮助应用程序寻找与Intent请求意图最匹配的组件。
具体的选择方法是Android将Intent的请求内容和一个叫做Intent Filter的过滤器比较Intent Filter中包含系统中所有可能的待选组件。
如果Intent Filter中某一组件匹配隐式Intent请求的内容那么Android就选择该组件作为该隐式Intent的目标组件. 3.4 Intent的具体应用——TinyDialer 我们组在这段时间里主要对intent进行了了解然后作出了一个用intent的拨号程序主要思想就是新建intent调用Android自带的拨号软件进行拨打电话。
涉及到Intent的
代码如下 Intent i new IntentIntent.ACTION_DIAL Uri.parsequottel://quotcallee startActivityi 具体过程如下所示 1 出现我们做出的拨号界面 8 图2 拨号界面 2 输入电话号码 图3 输入电话号码 3 调出Android自带的拨号程序、 图4 调出Android自带的拨号程序 4 拨打另一个电话 图5拨打电话 5 通话中 图6在互联网环境下接通电话 9 测试成功后我们本来想利用
Java语言继续编写能通过条件语句对电话号码的正确性进行判断但是可惜截止目前为止还没有成功接下来我们可以继续研究改进争取能够取得成功。
四 Android的UI优化 Android应用程序运行的移动设备受限于其运算能力存储空间及电池续航。
由此它必须是高效的。
电池续航可能是一个促使程序编写者优化程序结构的原因即使应用程序看起来已经运行的足够快了。
优化是需要一定技巧的性能良好的
代码固然重要但写出优秀
代码的成本往往也很高你可能不会过早地贸然为那些只运行一次或临时功能
代码实施优化如果你的应用程序反应迟钝并且卖得很贵或使系统中的其它应用程序变慢用户一定会有所响应你的应用程序下载量将很可能受到影响。
4.1性能的优化 a. 减少临时对象的频繁生成和销毁 b. 使用ViewStub延迟加载某些比较复杂的layout c. 循环或者多层循环内的操作尽可能简单更能享受jit带来的加速 d. 占用CPU较多的数据操作尽可能放在一个单独的线程中进行通过handler等方式把执行的结果交于UI线程显示。
Android系统中处处可见生命周期的使用包括activityview等等。
此种做法在线程同步等方面.