• 正在加载中...
  • ANDROID

    Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年7月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。2014第一季度Android平台已占所有移动广告流量来源的42.8%,首度超越iOS。但运营收入不及iOS。

    编辑摘要
    百科帮你涨姿势

    由Google公司和开放手机联盟领导及开发 主要使用于移动设备

    单词最早出现于利尔亚当1886年发表的科幻小说《未来夏娃》中

    Logo为全身绿色的机器人 其设计灵感源自于男女厕所门上的图形符号

    科学 +
    Android

    这些厂商今年没有发布计划并不意味着它们已经放弃了Android Wear。我们很可能于2017年看到更多的Android智能手表新品。[详细]

    基本信息 编辑信息模块

    中文名: 安卓 外文名: Android
    开发者: Google、开放手持设备联盟 发行商: Google
    上市时间: 2008年9月23日 运行系统: 类Unix,Linux
    源码类型: 自由及开放源代码软件 开发商: Google、开放手持设备联盟
    编程语言: C/C++(底层)Java等(应用层)
    内核类型: 宏内核(Linux内核) 软件许可: Apache License、GPL等
    系统家族类: Unix,Linux

    目录

    系统简介
    AndroidAndroid

    Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。
    Android一词最早出现于法国作家利尔亚当(Auguste Villiers de l'Isle-Adam)在1886年发表的科幻小说《未来夏娃》(L'ève future)中。他将外表像人的机器起名为Android。
    Android的Logo是由Ascender公司设计的,诞生于2010年,其设计灵感源于男女厕所门上的图形符号,于是布洛克绘制了一个简单的机器人,它的躯干就像锡罐的形状,头上还有两根天线,Android小机器人便诞生了。其中的文字使用了Ascender公司专门制作的称之为“Droid”的字体。Android是一个全身绿色的机器人,绿色也是Android的标志。颜色采用了PMS 376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌象徵。有时候,它们还会使用纯文字的Logo。[1]
    2012年7月美国科技博客网站BusinessInsider评选出二十一世纪十款最重要电子产品,Android操作系统和iPhone等榜上有名。

    发展历程/ANDROID 编辑

    AndroidAndroid
    2003年10月,Andy Rubin等人创建Android公司,并组建Android团队。[2]
    2005年8月17日,Google低调收购了成立仅22个月的高科技企业Android及其团队。安迪鲁宾成为Google公司工程部副总裁,继续负责Android项目。[3]
    2007年11月5日,谷歌公司正式向外界展示了这款名为Android的操作系统,并且在这天谷歌宣布建立一个全球性的联盟组织,该组织由34家手机制造商、软件开发商、电信运营商以及芯片制造商共同组成,并与84家硬件制造商、软件开发商及电信营运商组成开放手持设备联盟(Open Handset Alliance)来共同研发改良Android系统,这一联盟将支持谷歌发布的手机操作系统以及应用软件,Google以Apache免费开源许可证的授权方式,发布了Android的源代码。   
    2008年,在GoogleI/O大会上,谷歌提出了AndroidHAL架构图,在同年8月18号,Android获得了美国联邦通信委员会(FCC)的批准,在2008年9月,谷歌正式发布了Android 1.0系统,这也是Android系统最早的版本。
    2009年4月,谷歌正式推出了Android 1.5这款手机,从Android 1.5版本开始,谷歌开始将Android的版本以甜品的名字命名,Android 1.5命名为Cupcake(纸杯蛋糕)。该系统与Android 1.0相比有了很大的改进。
    2009年9月份,谷歌发布了Android 1.6的正式版,并且推出了搭载Android 1.6正式版的手机HTC Hero(G3),凭借着出色的外观设计以及全新的Android 1.6操作系统,HTC Hero(G3)成为当时全球最受欢迎的手机。Android 1.6也有一个有趣的甜品名称,它被称为Donut(甜甜圈)。
    2010年2月份,Linux内核开发者Greg Kroah-Hartman将Android的驱动程序从Linux内核“状态树”(“staging tree”)上除去,从此,Android与Linux开发主流将分道扬镳。在同年5月份,谷歌正式发布了Android 2.2操作系统。谷歌将Android 2.2操作系统命名为Froyo,翻译完名为冻酸奶。
    2010年10月份,谷歌宣布Android系统达到了第一个里程碑,即电子市场上获得官方数字认证的Android应用数量已经达到了10万个,Android系统的应用增长非常迅速。在2010年12月,谷歌正式发布了Android 2.3操作系统Gingerbread(姜饼)。
    安卓各个版本在市场受欢迎度安卓各个版本在市场受欢迎度
    2011年1月,谷歌称每日的Android设备新用户数量达到了30万部,到2011年7月,这个数字增长到55万部,而Android系统设备的用户总数达到了1.35亿,Android系统已经成为智能手机领域占有量最高的系统。
    2011年8月2日,Android手机已占据全球智能机市场48%的份额,并在亚太地区市场占据统治地位,终结了Symbian(塞班系统)的霸主地位,跃居全球第一。
    2011年9月份,Android系统的应用数目已经达到了48万,而在智能手机市场,Android系统的占有率已经达到了43%。继续在排在移动操作系统首位。谷歌将会发布全新的Android 4.0操作系统,这款系统被谷歌命名为Ice Cream Sandwich(冰激凌三明治)。
    2012年1月6日,谷歌Android Market已有10万开发者推出超过40万活跃的应用,大多数的应用程序为免费。Android Market应用程序商店目录在新年首周周末突破40万基准,距离突破30万应用仅4个月。在2011年早些时候,Android Market从20万增加到30万应用也花了四个月。[4]

     2013年11月1日,Android4.4正式发布,从具体功能上讲,Android4.4提供了各种实用小功能,新的Android系统更智能,添加更多的Emoji表情图案,UI的改进也更现代,如全新的HelloiOS7半透明效果。
    2015年27日,网络安全公司Zimperium研究人员警告,安卓(Android)存在“致命”安全漏洞,黑客发送一封彩信便能在用户毫不知情的情况下完全控制手机。

    发行版本/ANDROID 编辑

    测试版本

    Android在正式发行之前,最开始拥有两个内部测试版本,并且以著名的机器人名称来对其进行命名,它们分别是:阿童木(AndroidBeta),发条机器人(Android 1.0)。后来由于涉及到版权问题,谷歌将其命名规则变更为用甜点作为它们系统版本的代号的命名方法。甜点命名法开始于Android 1.5发布的时候。作为每个版本代表的甜点的尺寸越变越大,然后按照26个字母数序:纸杯蛋糕(Android 1.5),甜甜圈(Android 1.6),松饼(Android 2.0/2.1),冻酸奶(Android 2.2),姜饼(Android 2.3),蜂巢(Android 3.0),冰激凌三明治(Android 4.0),果冻豆(Jelly Bean,4.1和Android 4.2)。

    Android 1.1

    2008年9月发布的Android第一版。

    Android 1.5

    Cupcake(纸杯蛋糕):2009年4月30日发布。
    主要的更新:拍摄/播放影片,并支持上传到Youtube;支持立体声蓝牙耳机,同时改善自动配对性能;最新的采用WebKit技术的浏览器,支持复制/贴上和页面中搜索;GPS性能大大提高;提供屏幕虚拟键盘;主屏幕增加音乐播放器和相框widgets;应用程序自动随着手机旋转;短信、Gmail、日历,浏览器的用户接口大幅改进,如Gmail可以批量删除邮件;相机启动速度加快,拍摄图片可以直接上传到Picasa;来电照片显示。

    Android 1.6

    Donut(甜甜圈):2009年9月15日发布。
    主要的更新:重新设计的Android Market手势;支持CDMA网络;文字转语音系统(Text-to-Speech);快速搜索框;全新的拍照接口;查看应用程序耗电;支持虚拟私人网络(VPN);支持更多的屏幕分辨率;支持OpenCore2媒体引擎;新增面向视觉或听觉困难人群的易用性插件。

    Android 2.0

    2009年10月26日发布。
    主要的更新:优化硬件速度;"Car Home"程序;支持更多的屏幕分辨率;改良的用户界面;新的浏览器的用户接口和支持HTML5;新的联系人名单;更好的白色/黑色背景比率;改进Google Maps3.1.2;支持Microsoft Exchange;支持内置相机闪光灯;支持数码变焦;改进的虚拟键盘;支持蓝牙2.1;支持动态桌面的设计。
    Android 2.2/2.2.1 Froyo(冻酸奶):2010年5月20日发布。主要的更新:整体性能大幅度的提升;3G网络共享功能;Flash的支持;App2sd功能;全新的软件商店;更多的Web应用API接口的开发。

    Android 2.3.x

    Gingerbread(姜饼):2010年12月7日发布。
    主要的更新:增加了新的垃圾回收和优化处理事件;原生代码可直接存取输入和感应器事件、EGL/OpenGLES、OpenSL ES;新的管理窗口和生命周期的框架;支持VP8和WebM视频格式,提供AAC和AMR宽频编码,提供了新的音频效果器;支持前置摄像头、SIP/VOIP和NFC(近场通讯);简化界面、速度提升;更快更直观的文字输入;一键文字选择和复制/粘帖;改进的电源管理系统;新的应用管理方式。

    Android 3.0

    Honeycomb(蜂巢):2011年2月2日发布。
    主要更新:优化针对平板;全新设计的UI增强网页浏览功能;in-app purchases功能。

    Android 3.1

    Honeycomb(蜂巢):2011年5月11日布发布。
    版本主要更新:经过优化的Gmail电子邮箱;全面支持Google Maps;将Android手机系统跟平板系统再次合并从而方便开发者;任务管理器可滚动,支持USB输入设备(键盘、鼠标等);支持Google TV.可以支持XBOX 360无线手柄;widget支持的变化,能更加容易的定制屏幕widget插件。

    Android 3.2

    Honeycomb(蜂巢):2011年7月13日发布。
    版本更新:支持7英寸设备;引入了应用显示缩放功能。

    Android 4.0

    Ice Cream Sandwich(冰激凌三明治):2011年10月19日在香港发布。
    版本主要更新:全新的UI;全新的Chrome Lite浏览器,有离线阅读,16标签页,隐身浏览模式等;截图功能;更强大的图片编辑功能;自带照片应用堪比Instagram,可以加滤镜、加相框,进行360度全景拍摄,照片还能根据地点来排序;Gmail加入手势、离线搜索功能,UI更强大;新功能People:以联系人照片为核心,界面偏重滑动而非点击,集成了Twitter、Linkedin、Google+等通讯工具。有望支持用户自定义添加第三方服务;新增流量管理工具,可具体查看每个应用产生的流量,限制使用流量,到达设置标准后自动断开网络。

    Android 4.1

    Android 4.1Jelly Bean(果冻豆):2012年6月28日
    新特性:更快、更流畅、更灵敏;特效动画的帧速提高至60fps,增加了三倍缓冲;增强通知栏;全新搜索;搜索将会带来全新的UI、智能语音搜索和Google Now三项新功能;桌面插件自动调整大小;加强无障碍操作;语言和输入法扩展;新的输入类型和功能;新的连接类型。

    Android 4.2

    Android 4.2Jelly Bean(果冻豆):2012年10月30日
    Android 4.2沿用“果冻豆”这一名称,以反映这种最新操作系统与Android 4.1的相似性,但Android 4.2推出了一些重大的新特性,具体如下:Photo Sphere全景拍照功能;键盘手势输入功能;改进锁屏功能,包括锁屏状态下支持桌面挂件和直接打开照相功能等;可扩展通知,允许用户直接打开应用;Gmail邮件可缩放显示;Daydream屏幕保护程序;用户连点三次可放大整个显示频,还可用两根手指进行旋转和缩放显示,以及专为盲人用户设计的语音输出和手势模式导航功能等;支持Miracast无线显示共享功能;Google Now现可允许用户使用Gamail作为新的数据来源,如改进后的航班追踪功能、酒店和餐厅预订功能以及音乐和电影推荐功能等。

    Android 4.4 

    Android 4.4KitKat(奇巧巧克力):待定
    2013年9月4日凌晨,谷歌对外公布了Android新版本Android 4.4KitKat(奇巧巧克力),并且于2013年11月01日正式发布,新的4.4系统更加整合了自家服务,力求防止安卓系统继续碎片化、分散化。[5]

    系统架构/ANDROID 编辑

    Android的系统架构和其操作系统一样,采用了分层的架构。
    从架构图看,Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层

    应用程序

    Android会同一系列核心应用程序包一起发布,该应用程序包包括客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。

    应用程序框架

    Android结构Android结构
    开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。
    隐藏在每个应用后面的是一系列的服务和系统,其中包括;
    丰富而又可扩展的视图(Views),可以用来构建应用程序,它包括列表(Lists),网格(Grids),文本框(Text boxes),按钮(Buttons),甚至可嵌入的web浏览器。
    内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据
    资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件(Layout files)。
    通知管理器(Notification Manager)使得应用程序可以在状态栏中显示自定义的提示信息。
    活动管理器(Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能。

    系统运行库

    Android包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过Android应用程序框架为开发者提供服务。以下是一些核心库:
    系统C库-一个从BSD继承来的标准C系统函数库Libc,它是专门为基于Embedded linux的设备定制的。
    媒体库-基于PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG。
    Surface Manager-对显示子系统的管理,并且为多个应用程序提供了2D3D图层的无缝融合。
    LibWebCore-一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。

    系统结构/ANDROID 编辑

    系统内核

    Android是运行于Linux kernel之上,但并不是GNU/Linux。因为在一般GNU/Linux里支持的功能,Android大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以Bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android为了达到商业应用,必须移除被GNU GPL授权证所约束的部份,例如Android将驱动程序移到Userspace,使得Linux driver与Linux kernel彻底分开。Bionic/Libc/Kernel/ 并非标准的Kernel header files。Android 的 Kernel header是利用工具由 Linux Kernel header所产生的,这样做是为了保留常数、数据结构与宏。
    Android的Linux kernel控制包括安全(Security),存储器管理(Memory Management),程序管理(Process Management),网络堆栈(Network Stack),驱动程序模型(Driver Model)等。下载Android源码之前,先要安装其构建工具Repo来初始化源码。Repo是Android用来辅助Git工作的一个工具。

    后缀简介

    APK是安卓应用的后缀,是AndroidPackage的缩写,即Android安装包(apk)。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。apk文件和sis一样,把android sdk编译的工程打包成一个安装程序文件,格式为apk。APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。

    APK文件结构

    一个APK文件结构为:
    1.META-INF\(注:Jar文件中常可以看到);
    2.res\(注:存放资源文件的目录);
    3.AndroidManifest.xml(注:程序全局配置文件);
    4.classes.dex(注:Dalvik字节码);
    5.resources.arsc(注:编译后的二进制资源文件)。
    总结下我们发现Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接执行安装,和Windows Mobile中的PE文件有区别,这样做对于程序的保密性和可靠性不是很高,通过dexdump命令可以反编译,但这样做符合发展规律,微软的 Windows Gadgets或者说WPF也采用了这种构架方式。
    在Android平台中dalvik vm的执行文件被打包为apk格式,最终运行时加载器会解压然后获取编译后androidmanifest.xml文件中的permission分支相关的安全访问,但仍然存在很多安全限制,如果你将apk文件传到/system/app文件夹下会发现执行是不受限制的。
    最终我们平时安装的文件可能不是这个文件夹,而在android rom中系统的apk文件默认会放入这个文件夹,它们拥有着root权限

    硬件抽像层

    Android 的HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块。HAL的目的是为了把Android frameworkLinux kernel隔开,让Android不至过度依赖Linux kernel,以达成Kernel independent的概念,也让Android framework的开发能在不考量驱动程序实现的前提下进行发展。
    HALstub是一种代理人(Proxy)的概念,Stub是以*.so档的形式存在。Stub向HAL“提供”操作函数(Operations),并由Android runtime向HAL取得Stub的Operations,再Callback这些操作函数。HAL里包含了许多的Stub(代理人)。Runtime只要说明“类型”,即Module ID,就可以取得操作函数。

    中介软件

    操作系统与应用程序的沟通桥梁,应用分为两层:函数层(Library)和虚拟机(Virtual Machine)。Bionic是Android改良libc的版本。Android同时包含了Webkit,所谓的Webkit就是Apple Safari浏览器背后的引擎。Surface flinger是就2D或3D的内容显示到屏幕上。Android使用工具链(Toolchain)为Google自制的Bionic Libc。
    Android采用OpenCORE作为基础多媒体框架。Open CORE可分7大块:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。
    Android使用skia为核心图形引擎,搭配OpenGL/ES。skia与Linux Cairo功能相当,但相较于Linux Cairo,skia功能还只是雏形的。2005年Skia公司被Google收购,2007年初,Skia GL源码被公开,Skia也是Google Chrome的图形引擎。
    Android的多媒体数据库采用SQLite数据库系统。数据库又分为共用数据库及私用数据库。用户可通过ContentResolver类(Column)取得共用数据库。
    Android的中间层多以Java实现,并且采用特殊的Dalvik虚拟机(Dalvik Virtual Machine)。Dalvik虚拟机是一种“暂存器型态”(Register Based)的Java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。
    Dalvik虚拟机可以有多个实例(Instance),每个Android应用程序都用一个自属的Dalvik虚拟机来运行,让系统在运行程序时可达到优化。Dalvik虚拟机并非运行Java字节码(Bytecode),而是运行一种称为.dex格式的文件。

    安全权限机制

    Android本身是一个权限分立的操作系统。在这类操作系统中,每个应用都以唯一的一个系统识别身份运行(Linux用户ID与群组ID)。系统的各部分也分别使用各自独立的识别方式。Linux就是这样将应用与应用,应用与系统隔离开。
    系统更多的安全功能通过权限机制提供。权限可以限制某个特定进程的特定操作,也可以限制每个URI权限对特定数据段的访问。
    Android安全架构的核心设计思想是,在默认设置下,所有应用都没有权限对其他应用、系统或用户进行较大影响的操作。这其中包括读写用户隐私数据(联系人或电子邮件),读写其他应用文件,访问网络或阻止设备待机等。
    安装应用时,在检查程序签名提及的权限,且经过用户确认后,软件包安装器会给予应用权限。从用户角度看,一款Android应用通常会要求如下的权限:
    拨打电话、发送短信或彩信、修改/删除SD卡上的内容、读取联系人的信息、读取日程信的息,写入日程数据、读取电话状态或识别码、精确的(基于GPS)地理位置、模糊的(基于网络获取)地理位置、创建蓝牙连接、对互联网的完全访问、查看网络状态,查看WiFi状态、避免手机待机、修改系统全局设置、读取同步设定、开机自启动、重启其他应用、终止运行中的应用、设定偏好应用、震动控制、拍摄图片等。
    一款应用应该根据自身提供的功能,要求合理的权限。用户也可以分析一款应用所需权限,从而简单判定这款应用是否安全。如一款应用是不带广告的单机版,也没有任何附加的内容需要下载,那么它要求访问网络的权限就比较可疑。

    应用组件/ANDROID 编辑

    Android开发四大组件分别是:活动(Activity):用于表现功能。服务(Service):后台运行服务,不提供界面呈现。广播接收器(BroadcastReceiver):用于接收广播。内容提供商(Content Provider):支持在多个应用中存储和读取数据,相当于数据库

    活动
    安卓不同版本图片安卓不同版本图片

    Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity可以算是开发者遇到的最频繁,也是Android当中最基本的模块之一。在Android的程序当中,Activity一般代表手机屏幕的一屏。如果把手机比作一个浏览器,那么Activity就相当于一个网页。在Activity当中可以添加一些Button、Check box等控件。可以看到Activity概念和网页的概念相当类似。
    一般一个Android应用是由多个Activity组成的。这多个Activity之间可以进行相互跳转,例如,按下一个Button按钮后,可能会跳转到其他的Activity。和网页跳转稍微有些不一样的是,Activity之间的跳转有可能返回值,例如,从Ac-tivity A跳转到Activity B,那么当Activity B运行结束的时候,有可能会给Activity A一个返回值。这样做在很多时候是相当方便的。
    当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态,并且压入历史堆栈中。用户可以通过回退操作返回到以前打开过的屏幕。可以选择性的移除一些没有必要保留的屏幕,因为Android会把每个应用的开始到当前的每个屏幕保存在堆栈中。

    服务

    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(0的Intent对象会传递给onStart()方法。调用顺序为:onCreate->onStart(可多次调用)-->onDestroy。
    (2)Context.bindService():Service会经历onCreate()-->onBind(),onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind-->onDestroyed相应退出,所谓绑定在一起就共存亡了。

    广播接收器

    在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的Broadcast进行过滤接受并响应的一类组件。可以使用BroadcastReceiver来让应用对一个外部的事件做出响应。这是非常有意思的,例如,当电话呼入这个外部事件到来的时候,可以利用BroadcastReceiver进行处理。例如,当下载一个程序成功完成的时候,仍然可以利用BroadcastReceiver进行处理。BroadcastReceiver不能生成UI,也就是说对于用户来说不是透明的,用户是看不到的。BroadcastReceiver通过NotificationManager来通知用户这些事情发生了。BroadcastReceiver既可以在AndroidManifest.xml中注册,也可以在运行时的代码中使用Context.registerReceiver()进行注册。只要是注册了,当事件来临的时候,即使程序没有启动,系统也在需要的时候启动程序。各种应用还可以通过使用Context.sendBroadcast()将它们自己的Intent Broadcasts广播给其他应用程序

    内容提供

    Content Provider是Android提供的第三方应用数据的访问方案。
    在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件等内容,都是不允许其他直接访问的。Andorid当然不会真的把每个应用都做成一座孤岛,它为所有应用都准备了一扇窗,这就是Content Provider。应用想对外提供的数据,可以通过派生Content Provider类,封装成一枚Content Provider,每个Content Provider都用一个uri作为独立的标识,形如:content://com.xxxxx。所有东西看着像REST的样子,但实际上,它比REST更为灵活。和REST类似,uri也可以有两种类型,一种是带id的,另一种是列表的,但实现者不需要按照这个模式来做,给id的uri也可以返回列表类型的数据,只要调用者明白,就无妨,不用苛求所谓的REST。

    平台优势/ANDROID 编辑

    开放性

    在优势方面,Android平台首先就是其开发性,开发的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。
    开发性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。

    丰富的硬件

    这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容,如同从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移。

    方便开发

    Android平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给Android难题之一。

    Google应用

    在互联网的Google已经走过10年度历史,从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台手机将无缝结合这些优秀的Google服务。

    发展前景/ANDROID 编辑

    Android厂商会有怎样的发展?
    前几年,三星还能够利用用户规模和更好的执行力夺取Android市场近半的份额和几乎所有的利润。但OME(原始设备制造商)行业正发生改变,三星的Android市占率正快速缩减。并不是说“传统的”品牌OEM厂商比它做得更好,而是整个深圳生态系统在开始走向世界。小米是最典型的例子,该公司已经在中国取得了不少市场份额,目前也尝试在印度复制它的成功,但在新兴市场,也有不少的小型本土公司在借助深圳手机制造工厂来在本土市场建立品牌,开疆辟土。

    未来这会演变成什么样呢?小米会建立起全球化的中端品牌吗?其它的中国厂商是否也将取得这样的成绩?新兴市场的本土厂商会有多少家?手机市场一直都是规模游戏,而体量小但可利用整个深圳生态系统的规模的本土品牌有没可能打出自己的一片天空呢?会否有人能够在高端市场挑战苹果呢(Android阵营能诞生这样的公司吗)?

    Android将走向何方?

    有人认为,OEM厂商的未来无关紧要,除了对于它们的股东之外——它只不过是手机后壳印制的一个标签而已。而像小米这样的公司指向另外一个Android问题——Android本身将走向何方?

    到目前为止,“非谷歌”Android体现在两个方面。一方面,由于谷歌退出中国大陆市场,当地有很多的Android设备都没有或者不能使用谷歌产品服务,但对于谷歌而言,这不是一个广泛的战略问题。另一方面,亚马逊尝试借Kindle Fire平板电脑产品线打造自有的次级平台(“定制系统”),但该款平板电脑属于小众产品,Fire Phone智能手机的表现也让人大跌眼镜,这一定程度上是因为它们缺少谷歌的产品服务。与此同时,主流Android厂商在Android上加入自有的差异化表层的尝试大多以失败告终。

    如今,这种情况似乎在发生改变。一方面,跟其它厂商不同,小米在Android上成功打造出了一套颇具吸引力的差异化服务。目前,在中国市场以外,该公司也使用谷歌的服务,但这种情况可能不能持续下去。

    谷歌对Android的控制主要在于Google Play服务、API(应用程序接口)套件以及它在Android上部署的各款应用(主要是Maps和Apps)。谷歌对于这些的使用,跟微软对Office和Windows的处理很像——它们相互支撑,辅以条款规定出售定制Android手机的厂商不能出售搭载正式Android版本的手机,这使得大公司不敢贸然进行试验。

    可以说,在中国以外地区,卖出没有谷歌地图和Google Play商店的手机会困难——这样一台手机跟功能手机无异(至少对于普通消费者来说是这样)。因此,除了亚马逊之后,没有人真正尝试过那么做,目前也有一些数据显示谷歌地图在iOS上的份额实际上很小。我想,在谷歌各式各样的移动服务中,有很多都有相当庞大的用户群,但是黏性并不高。考虑到主流Android厂商出售“正式”Android设备普遍赚不到钱,而大批小厂商依托深圳生态系统,即便谷歌阻止它们进行定制,它们也没什么好损失的,可能会有更多的人去尝试进行定制。

    然而,这引向了这个更加深层的Android问题——谷歌5年后将会提供些什么呢?市面上将会出现带有已过时的Android程序的Chrome手机?谷歌已经让一些Android应用在Chrome上运行(反之亦然)——这可以理解为未来的平台吗?如果真是如此,那是否意味着人们将有更多的自由在上面搭建自己的平台呢?

    交互模式、信息传送与聚合层

    谷歌改变“Android”的定义,一部分是因为要加强平台控制,而更深层的原因是改变智能手机的交互模式。很显然,对于谷歌来说,应用一直都是个结构化问题,因为它们的内容隐藏在搜索引擎之外,而且不管付费与否,都跟搜索结果不相连。由于诸多的原因,HTML5的“网页应用”成了死胡同,但它们能够解决一个底层问题:在Web上,你可以链接任何的资源,在移动端则不行——所有东西都相互隔离。

    谷歌的问题似乎也有了明显的答案。一个答案是,回归Web,在Android 5(“棒棒糖”)上,谷歌显然在尝试模糊化应用和Web浏览的差异。然而,我不确定回归Web是解决方案:科技趋向于向前发展,解决原有的问题,产生新的问题,而不是回归旧的解决方案和旧的问题。我们解决Web的问题并不是通过重建AOL,而是借助谷歌和Facebook。

    与此同时,谷歌给Web带来的搜索模式在移动端也不大可行——移动既是“后Netscape'”,又是“后Pagerank”。另外,我也不觉得移动时代之前的谷歌Web是个乐园——谷歌的统治存在不少的问题。

    现在,我们发现聚合层和发现层正出现转变。我们经历了从一切都捆绑在网络浏览器内,到通过谷歌获取信息,再到让特定内容与Web分离的应用图标。与此同时,应用们捆绑一个网站的所有内容,使得它无法直接连接特定的页面。因此,我们现有既有推倒应用之间壁垒的深层链接,也有将应用中的内容片段分离出来的可行动通知栏。我们还有另一种提取内容片段的工具:浮动的卡片(以各种形式呈现)。

    这反过来产生了新的问题。深层链接不一定适合应用交互模式,也不清楚哪些公司应该这么做——这是否应该铺设在平台上(如iOS上的Facebook和谷歌),还是应该由平台所有者自己来建造?与此同时,iOS和Android的通知中心上的通知提醒成了新的信息流。[6]
    参考资料
    [1]^引用日期:2014-12-01
    [2]^引用日期:2014-12-01
    [3]^引用日期:2014-12-01
    [4]^引用日期:2014-12-01
    [5]^引用日期:2014-12-01
    [6]^引用日期:2016-06-17

    互动百科的词条(含所附图片)系由网友上传,如果涉嫌侵权,请与客服联系,我们将按照法律之相关规定及时进行处理。未经许可,禁止商业网站等复制、抓取本站内容;合理使用者,请注明来源于www.baike.com。

    登录后使用互动百科的服务,将会得到个性化的提示和帮助,还有机会和专业认证智愿者沟通。

    互动百科用户登录注册