软件开发综述课程设计报告2.docx

上传人:b****5 文档编号:29092236 上传时间:2023-07-20 格式:DOCX 页数:26 大小:314.62KB
下载 相关 举报
软件开发综述课程设计报告2.docx_第1页
第1页 / 共26页
软件开发综述课程设计报告2.docx_第2页
第2页 / 共26页
软件开发综述课程设计报告2.docx_第3页
第3页 / 共26页
软件开发综述课程设计报告2.docx_第4页
第4页 / 共26页
软件开发综述课程设计报告2.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

软件开发综述课程设计报告2.docx

《软件开发综述课程设计报告2.docx》由会员分享,可在线阅读,更多相关《软件开发综述课程设计报告2.docx(26页珍藏版)》请在冰豆网上搜索。

软件开发综述课程设计报告2.docx

软件开发综述课程设计报告2

Android总结

Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。

早期由原名为"Android"的公司开发,谷歌在2005年收购"Android.Inc"后,继续对Android系统开发运营,它采用了软件堆层(softwarestack,又名软件叠层)的架构,主要分为三部分。

底层Linux内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以Java编写。

    2011年初数据显示,仅正式上市两年的操作系统Android已经超越称霸十年的塞班系统,使之跃居全球最受欢迎的智能手机平台。

现在,Android系统不但应用于智能手机,也在平板电脑市场急速扩张,在智能MP4方面也有较大发展。

采用Android系统主要厂商包括台湾的HTC(第一台谷歌的手机G1由HTC生产代工)、韩国三星、美国摩托罗拉、索尼爱立信等,中国大陆厂商如:

首派(A101、A100、A80、A60S及未上市的A70),魅族(M9),华为、中兴、联想、蓝魔等。

系统架构

应用程序  Android以Java为编程语言,从接口到功能,都有层出不穷的变化,其中Activity等同于J2ME的MIDlet,一个Activity类(class)负责创建视窗(window),一个活动中的Activity就是在foreground(前景)模式,背景运行的程序叫做Service。

两者之间通过由ServiceConnection和AIDL连结,达到复数程序同时运行的效果。

如果运行中的Activity全部画面被其他Activity取代时,该Activity便被停止(stopped),甚至被系统清除(kill)。

 

  View等同于J2ME的Displayable,程序人员可以通过View类与“XML layout”档将UI放置在视窗上,Android1.5的版本可以利用View打造出所谓的Widgets,其实Widget只是View的一种,所以可以使用xml来设计layout,HTC的AndroidHero手机即含有大量的widget。

至于ViewGroup是各种layout的基础抽象类(abstractclass),ViewGroup之内还可以有ViewGroup。

View的构造函数不需要再Activity中调用,但是Displayable的是必须的,在Activity中,要通过findViewById()来从XML中取得View,Android的View类的显示很大程度上是从XML中读取的。

View与事件(event)息息相关,两者之间通过Listener结合在一起,每一个View都可以注册一个eventlistener,例如:

当View要处理用户触碰(touch)的事件时,就要向Android框架注册View.OnClickListener。

另外还有Image等同于J2ME的BitMap。

中介软件  操作系统与应用程序的沟通桥梁,应用分为两层:

函数层(Library)和虚拟机(VirtualMachine)。

Bionic是Android改良libc的版本。

Android同时包含了Webkit,所谓的Webkit就是AppleSafari浏览器背后的引擎。

Surfaceflinger是就2D或3D的内容显示到屏幕上。

Android使用工具链(Toolchain)为Google自制的BionicLibc。

 

  Android采用OpenCORE作为基础多媒体框架。

OpenCORE可分7大块:

PVPlayer、PVAuthor、Codec、PacketVideoMultimediaFramework(PVMF)、OperatingSystemCompatibilityLibrary(OSCL)、Common、OpenMAX。

 

  Android使用skia为核心图形引擎,搭配OpenGL/ES。

skia与LinuxCairo功能相当,但相较于LinuxCairo,skia功能还只是雏形的。

2005年Skia公司被Google收购,2007年初,SkiaGL源码被公开,目前Skia也是GoogleChrome的图形引擎。

 

  Android的多媒体数据库采用SQLite数据库系统。

数据库又分为共用数据库及私用数据库。

用户可通过ContentResolver类(Column)取得共用数据库。

 

  Android的中间层多以Java实现,并且采用特殊的Dalvik虚拟机(DalvikVirtualMachine)。

Dalvik虚拟机是一种“暂存器型态”(RegisterBased)的Java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。

 

  Dalvik虚拟机可以有多个实例(instance),每个Android应用程序都用一个自属的Dalvik虚拟机来运行,让系统在运行程序时可达到优化。

Dalvik虚拟机并非运行Java字节码(Bytecode),而是运行一种称为.dex格式的文件。

硬件抽像层Android的HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块。

HAL的目的是为了把Androidframework与Linuxkernel隔开,让Android不至过度依赖Linuxkernel,以达成kernelindependent的概念,也让Androidframework的开发能在不考量驱动程序实现的前提下进行发展。

 

  HALstub是一种代理人(proxy)的概念,stub是以*.so档的形式存在。

Stub向HAL“提供”操作函数(operations),并由Androidruntime向HAL取得stub的operations,再callback这些操作函数。

HAL里包含了许多的stub(代理人)。

Runtime只要说明“类型”,即moduleID,就可以取得操作函数。

 

编程语言  Android是运行于Linuxkernel之上,但并不是GNU/Linux。

因为在一般GNU/Linux里支持的功能,Android大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。

Android又以bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。

Android为了达到商业应用,必须移除被GNUGPL授权证所约束的部份,例如Android将驱动程序移到userspace,使得Linuxdriver与Linuxkernel彻底分开。

bionic/libc/kernel/并非标准的kernelheaderfiles。

Android的kernelheader是利用工具由Linuxkernelheader所产生的,这样做是为了保留常数、数据结构与宏。

 

  目前Android的Linuxkernel控制包括安全(Security),存储器管理(MemoryManagement),程序管理(ProcessManagement),网络堆栈(NetworkStack),驱动程序模型(DriverModel)等。

下载Android源码之前,先要安装其构建工具 Repo来初始化源码。

Repo是Android用来辅助Git工作的一个工具。

 

安全与权限  Android本身是一个权限分立的操作系统。

在这类操作系统中,每个应用都以唯一的一个系统识别身份运行(Linux用户ID与群组ID)。

系统的各部分也分别使用各自独立的识别方式。

Linux就是这样将应用与应用,应用与系统隔离开。

 

  系统更多的安全功能通过权限机制提供。

权限可以限制某个特定进程的特定操作,也可以限制每个URI权限对特定数据段的访问。

 

  Android安全架构的核心设计思想是,在默认设置下,所有应用都没有权限对其他应用、系统或用户进行较大影响的操作。

这其中包括读写用户隐私数据(联系人或电子邮件),读写其他应用文件,访问网络或阻止设备待机等。

安装应用时,在检查程序签名提及的权限,且经过用户确认后,软件包安装器会给予应用权限。

从用户角度看,一款Android应用通常会要求如下的权限:

 

  拨打电话、发送短信或彩信、修改/删除SD卡上的内容、读取联系人信息、读取日程信息,写入日程数据、读取电话状态或识别码、精确的(基于GPS)地理位置、模糊的(基于网络获取)地理位置、创建蓝牙连接、对互联网的完全访问、查看网络状态,查看WiFi状态、避免手机待机、修改系统全局设置、读取同步设定、开机自启动、重启其他应用、终止运行中的应用、设定偏好应用、震动控制、拍摄图片等。

 

  一款应用应该根据自身提供的功能,要求合理的权限。

用户也可以分析一款应用所需权限,从而简单判定这款应用是否安全。

如一款应用是不带广告的单机版,也没有任何附加内容需要下载,那么它要求访问网络的权限就比较可疑。

Android开发的四大组件

1、Activityr

Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity可以算是开发者遇到的最频繁,也是Android当中最基本的模块之一。

在Android的程序当中,Activity一般代表手机屏幕的一屏。

如果把手机比作一个浏览器,那么Activity就相当于一个网页。

在Activity当中可以添加一些Button、Checkbox等控件。

可以看到Activity概念和网页的概念相当类似。

  一般一个Android应用是由多个Activity组成的。

这多个Activity之间可以进行相互跳转,例如,按下一个Button按钮后,可能会跳转到其他的Activity。

和网页跳转稍微有些不一样的是,Activity之间的跳转有可能返回值,例如,从ActivityA跳转到ActivityB,那么当ActivityB运行结束的时候,有可能会给ActivityA一个返回值。

这样做在很多时候是相当方便的。

  当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态,并且压入历史堆栈中。

用户可以通过回退操作返回到以前打开过的屏幕。

我们可以选择性的移除一些没有必要保留的屏幕,应为Android会把每个应用的开始到当前的每个屏幕保存在堆栈中。

  2、Service

  Service是android系统中的一种组件,它跟Activity的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。

Service是没有界面的长生命周期的代码。

Service是一种程序,它可以运行很长时间,但是它却没有用户界面。

这么说有点枯燥,来看个例子。

打开一个音乐播放器的程序,这个时候若想上网了,那么,我们打开Android浏览器,这个时候虽然我们已经进入了浏览器这个程序,但是,歌曲播放并没有停止,而是在后台继续一首接着一首的播放。

其实这个播放就是由播放音乐的Service进行控制。

当然这个播放音乐的Service也可以停止,例如,当播放列表里边的歌曲都结束,或者用户按下了停止音乐播放的快捷键等。

service可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务嘛,总是藏在后头的。

  开启service有两种方式:

  

(1)Context.startService():

Service会经历onCreate->onStart(如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次);stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。

该Service的调用者再启动起来后可以通过stopService关闭Service。

注意,多次调用Context.startservice()不会嵌套(即使会有相应的onStart()方法被调用),所以无论同一个服务被启动了多少次,一旦调用Context.stopService()或者stopSelf(),他都会被停止。

补充说明:

传递给startService()的Intent对象会传递给onStart()方法。

调用顺序为:

onCreate-->onStart(可多次调用)-->onDestroy。

  

(2)Context.bindService():

Service会经历onCreate()->onBind(),onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。

这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind->onDestroyed相应退出,所谓绑定在一起就共存亡了。

  3、BroadcastReceiver

  在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。

而BroadcastReceiver是对发送出来的Broadcast进行过滤接受并响应的一类组件。

可以使用BroadcastReceiver来让应用对一个外部的事件做出响应。

这是非常有意思的,例如,当电话呼入这个外部事件到来的时候,可以利用BroadcastReceiver进行处理。

例如,当下载一个程序成功完成的时候,仍然可以利用BroadcastReceiver进行处理。

BroadcastReceiver不能生成UI,也就是说对于用户来说不是透明的,用户是看不到的。

BroadcastReceiver通过NotificationManager来通知用户这些事情发生了。

BroadcastReceiver既可以在AndroidManifest.xml中注册,也可以在运行时的代码中使用Context.registerReceiver()进行注册。

只要是注册了,当事件来临的时候,即使程序没有启动,系统也在需要的时候启动程序。

各种应用还可以通过使用Context.sendBroadcast()将它们自己的intentbroadcasts广播给其他应用程序。

  注册BroadcastReceiver有两种方式:

  

(1)在AndroidManifest.xml进行注册。

这种方法有一个特点即使你的应用程序已经关闭了,但这个BroadcastReceiver依然会接受广播出来的对象,也就是说无论你这个应用程序时开还是关都属于活动状态都可以接受到广播的事件;

  

(2)在代码中注册广播。

  第一种俗称静态注册,第二种俗称动态注册,这两种注册BroadcastReceiver的区别:

  动态注册较静态注册灵活。

实验证明:

当静态注册一个BroadcastReceiver时,不论应用程序是启动与否。

都可以接受对应的广播。

  动态注册的时候,如果不执行unregisterReceiver();方法取消注册,跟静态是一样的。

但是如果执行该方法,当执行过以后,就不能接受广播了。

  4、ContentProvider

  ContentProvider是Android提供的第三方应用数据的访问方案。

  在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件、等等内容,都是不允许其他直接访问的。

Andorid当然不会真的把每个应用都做成一座孤岛,它为所有应用都准备了一扇窗,这就是ContentProvider。

应用想对外提供的数据,可以通过派生ContentProvider类,封装成一枚ContentProvider,每个ContentProvider都用一个uri作为独立的标识,形如:

content:

//com.xxxxx。

所有东西看着像REST的样子,但实际上,它比REST更为灵活。

和REST类似,uri也可以有两种类型,一种是带id的,另一种是列表的,但实现者不需要按照这个模式来做,给你id的uri你也可以返回列表类型的数据,只要调用者明白,就无妨,不用苛求所谓的REST。

  另外,ContentProvider不和REST一样只有uri可用,还可以接受Projection,Selection,OrderBy等参数,这样,就可以像数据库那样进行投影,选择和排序。

查询到的结果,以Cursor(参见:

reference/android/database/Cursor.html)的形式进行返回,调用者可以移动Cursor来访问各列的数据。

  ContentProvider屏蔽了内部数据的存储细节,向外提供了上述统一的接口模型,这样的抽象层次,大大简化了上层应用的书写,也对数据的整合提供了更方便的途径。

ContentProvider内部,常用数据库来实现,Android提供了强大的Sqlite支持,但很多时候,你也可以封装文件或其他混合的数据。

  在Android中,ContentResolver是用来发起ContentProvider的定位和访问的。

不过它仅提供了同步访问的ContentProvider的接口。

但通常,ContentProvider需要访问的可能是数据库等大数据源,效率上不足够快,会导致调用线程的拥塞。

因此Android提供了一个AsyncQueryHandler(参见:

reference/android/content/AsyncQueryHandler.html),帮助进行异步访问ContentProvider。

  在各大组件中,Service和ContentProvider都是那种需要持续访问的。

Service如果是一个耗时的场景,往往会提供异步访问的接口,而ContentProvider不论效率如何,都提供的是约定的同步访问接口。

Android的盈利模式

或许你不会想到,移动市场占有率最高的Android系统实际上并不能为谷歌带来多少收益。

为什么会出现这种情况?

谷歌又该怎样去改变这个现状?

科技网站TheGlobeandMail日前就撰文对这个问题进行了分析:

 想要去理解为何拥有最高占有率的Android在利润率方面的表现却不尽人意,我们不妨把目光投向上个月MWC上的一条大新闻:

售价仅有25美元的智能手机。

  热门网页浏览器Firefox的开发商Mozilla在大会上宣布,他们计划推出一款运行FirefoxOS的超低售价智能手机。

此消息一出,便引来业界一片哗然。

  这条消息之所以如此让人震惊,是因为在如此低的价格下,这款手机可能会成为谷歌Android操作系统的严峻挑战。

在全球每售出的10部智能手机和平板电脑当中,就有8部运行的是Android系统。

但即便拥有如此高的流行度,三星这样的公司依靠Android手机和平板赚取了数十亿美元,谷歌却并没有通过自己一手打造的操作系统获取到多少的利润。

  这可以被称作是“Android悖论”:

在过去7年里,谷歌制作出了历史上发展速度最快的操作系统。

但虽然在市场份额上取得了成功,Android主要的收益来源和谷歌的传统搜索引擎和以前并没有什么两样(但利润率更低),那就是提供广告服务。

谷歌也没有公布过Android的盈利数字。

  “Android几乎无所不在,从智能手机到平板电脑,再到联网设备。

”移动行业顾问ChetanSharma说道。

  “这一切背后的策略是,如果你拥有更大的手机用户群,他们就会更多的使用浏览器,浏览器的使用因此也就转换成了搜索的收益。

但事情并没有按照谷歌所预想的方式发展。

  Android用户更喜欢使用应用,而不是浏览器。

  由于微软这些公司表现欠佳,如今的移动产业是由两大平台所控制的,那就是谷歌的Android和苹果的iOS。

  但谷歌和苹果所采取的经营策略却完全不同。

苹果拒绝以任何价格向第三方厂商提供iOS,而谷歌却允许任何人免费使用Android,并对其进行定制。

结果就是,谷歌在数量上占据绝对优势,在全球市场上取得了大约80%的份额。

而在另一方面,智能手机产业总收益的一半都进入了苹果的口袋——在上个季度,这个数字大约是325亿美元(总收益576亿美元)。

  谷歌的市场份额广义上可以被分成两类:

高端和低端。

其中高端市场主要是三星一家独大,而低端市场则是其余的厂商以总体较低的利润率在相互竞争。

  谷歌在低端市场上的成功也带来了一些意想不到的结果。

除了三星之外,许多厂商都在以极低的利润率来进行着设备的生产。

如果谷歌今后打算为Android收取授权费,那么这些公司可能会就此放弃该平台。

  Android在低端市场上的主导地位还引起了一个更加模糊的副作用:

许多业界观察员都有这样的印象——无论是真实情况还是揣测——那就是Android用户在任何情况下都更不可能去花钱,特别是和愿意花高价购买苹果设备的消费者来说。

  在去年的10月份,广告平台Nanigans发布了一份备受争议的报告,而这份报告似乎就证实了上文中的疑问。

Nanigans研究了大约2千亿条Facebook广告的数据,以此来评估Android和iOS设备当中投放广告的价值回报。

结果非常直白:

苹果平台上Facebook广告的回报率要比Android高1790%。

  “谷歌的确正在努力。

”Frost&Sullivan的电信分析师RonaldGruia说道。

他指出,在让用户更加舒服地花钱上面,谷歌最近也尝试了一些新的花样,比如GooglePlay音乐商店。

“但我并不认为Android用户能够以苹果用户的那种方式带来收益。

  在新兴的中国市场上,我们可以清晰地看到谷歌所面临的货币化挑战。

在官方层面,谷歌在国内的存在感几乎为零。

但由于许多厂商都会为自己的廉价智能手机来对Android进行定制,谷歌也就拥有一个巨大、但大体上毫无收益的用户群体。

  “谷歌最大的敌人是他们自己,”科技分析师KevinRestivo说道,“中国的市场份额很惊人,但确是无利可图的。

中国厂商也没兴趣去帮助谷歌盈利。

  因为这些厂商都可以随意对Android进行定制,他们的低端产品因此也招致了对于Android的一个最大批评:

版本太多。

  “Android依然是高度碎片化的,这种情况也越来越糟,”Forrester首席分析师TedSchadler说道,“我们看到了许多不同版本的Android。

因为它是开源的,谷歌无法对每一个方面进行控制。

  考虑到Android用户群体的惊人规模,货币化和碎片化的问题在短期内都是难以去解决的。

因此,谷歌似乎想要通过拼数量的方式来赢得这场大战。

  就像Restivo指出的,谷歌对于家庭自动化创业公司Nest的收购就为Android开启了一篇新天地——从恒温器到电冰箱,Android的存在可能会被拓展到我们生活当中的更多联网设备身上。

如果这样的未来成为现实,Android可能会从一款掌管移动领域的系统变成掌管着世界的系统。

“Android效应才刚刚开始,”Restivo说道,“会有许多大事将会发生,但谷歌的优势在于能够迅速推出服务

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 社交礼仪

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1