




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android的关键概念现在你对Android是什么已经有了基本概念,现在让我们看看它是如何工作的。Android的有些部分大家可能比较熟悉,比如 Linux kernel,OpenGL 和 SQL数据库。但是其它部分就可能比较陌生,比如:Android应用程序生命周期的概念。为了写出好的Android的应用程序,就需要很好的理解这些基本概念。系统架构 Android的系统架构如图2.1 总体上是分为4层。每一层都会使用下层提供的服务。我们重点介绍下面的部分:Figure 2.1: Android 系统结构Linux KernelAndroid使用Linux kernel作为它的核心。Linux现在已经随处可见了。Linux 提供的是硬件抽象层,这样Android就可以在未来被移植到广泛的平台上。在内部,Android使用Linux做内存管理,进程管理,网络和其他操作系统的服务。Android手机用户将不会看到Linux,并且应用程序也不能直接做Linux调用。但是,作为开发人员,必须知道它的存在。在开发过程中,需要一些工具来和Linux通讯. 比如,adb shell 命令将会打开一个 Linux shell。在这个shell里面,可以敲入一些命令运行。同时,也能在安全限制的条件下,检查Linux文件系统,查看活动进程等等。Native LibrariesKernel之上的一层是 Android native libraries。这些共享库是用C or C+写的。根据电话实际硬件进行编译, 并由设备制造商预安装在电话里。最重要的native libraries部分包括以下内容: Surface Manager: Android使用一个类似的Vista或compiz,但是更简单的复合窗口管理器。因为程序员不能直接在屏幕上画图。你的绘图命令将被放入一个offscreen的位图中。这个离屏位图将会联合其它位图,以便给用户呈现统一的显示。这种方式将使系统可以创建各种各样的有趣效果。 2D and 3D graphics: 在Android中,2D和3D元素可以联合成一个单一的用户接口。如果设备带3D硬件,库会使用它,否则就采用快速软件渲染。 Media codecs: Android能以多种格式进行视频播放以及纪录和播放音频。支持的格式包括:AAC, AVC (H.264), H.263, MP3, 和 MPEG-4. SQL database: 与Firefox和苹果iPhone使用相同的轻量级的SQLite数据库引擎。 Browser engine: 为了快速的HTML内容显示,Android采用WebKit的library 3。 这是和谷歌浏览器,苹果Safari浏览器,苹果iPhone,诺基亚的S60平台上相同的引擎。这些库是为上层程序服务的。从Android 1.5开始,你能够通过NDT(Native Development Toolkit)开发你自己的native libraries。Android Runtime在Linux kernel之上是Android runtime,包括:Dalvik虚拟机和核心Java库。Dalvik虚拟机是Google专为移动设备优化的Java实现。你为Android写的所有程序都必须用Java编写并在这个VM运行。Dalvik 和传统的Java之间有2个重要的不同: Dalvik VM 运行.dex 文件,这种文件会在编译时,由标准的.class and .jar 文件转换而来。.dex文件比class文件更紧凑和更有效率。更适合在有限内存和电池容量的设备上运行。 Android自带的核心Java库与J2SE和J2ME的核心库是不一样的,但是有大量的重叠。Application Framework在此之上是Application Framework 层。这一层提供了创建应用程序的基础。Framework 是Android自带的,但是你也能用你自己的组件扩展它。下面是Framework最重要的部分: Activity manager: 控制应用程序生命周期并维护一个共同的回退堆栈,以方便用户导航。 Content providers: 这些对象封装了需要在应用程序间共享的数据。比如通讯簿。 Resource manager: 程序需要但不用编码的任何资源 Location manager: Android 电话总是知道它的位置。 Notification manager: 如到达邮件,约会活动,接近警报,外来入侵等事件,可以以一个不显眼的方式向用户呈现。Applications and Widgets在Android系统架构图的最高一层是Applications and Widgets 层. 可以把这一层看成是Android外部呈现。最终用户只能看到这一层的应用程序,根本不会知道下面的系统层次。应用程序就是接管整个屏幕,并与用户交互的程序。相反,Widgets (有时也被叫做gadgets), 只在主屏应用程序的一小块矩形区域上运行。.当购买Android手机时,它会预先安装一些标准的系统应用,其中包括以下方面: 电话拨号 Email 通讯簿 Web 浏览器 Android Market使用 Android Market, 用户将能下载新的应用程序,并安装在他们的手机上运行。程序生命周期在您的标准Linux或Windows桌面上,可以有多个应用程序同时在不同的Windows上运行。其中一个可以获得键盘输入,并可以很容易的在不同的Windows间切换焦点。但是,windons的移动和完毕有用户负责。Android 不是以这种方式运行的。在 Android中, 有一个前台的应用程序来掌管处状态栏之外的所有显示。当用户打开电话后他们看见的第一个应用程序就是如图2.2的Home application。这个应用程序通常是显示一幅背景图片,一个搜索栏或是时钟小程序,和一个可滚动的应用程序列表。方便用户调用。当用户启动一个应用程序,Android把它放到前端。从这个程序,用户也可以调用其它应用程序,或是同一个应用程序的其它屏幕。所有这些应用程序都会被纪录在系统Activity Manager 的Application stack中. 在任何时候,用户都能通过后退按钮返回到堆栈中的上一个窗口。从用户的观点看,这有点像web浏览器中的历史纪录。按下Back按钮后返回到上一页。Figure 2.2:Home application进程 != 应用程序在内部,每个用户界面屏幕的代表是一个活动类.每项活动都有自己的生命周期。一个应用程序是一个或多次活动加上一个包含这些活动的Linux进程。在Android中,即使进程被杀,一个应用程序也可能是“活”的。换句话讲,活动的生命周期并不是和进程生命周期绑定在一齐的。进程对于活动来讲就是一个可以丢弃的容器。这和你熟悉的其它系统不一样。让我们先看看下图:在应用程序的生命周期中,一个Android 程序的每一个活动都可能是多个状态中的一个。开发人员不能控制活动所处的状态。这一切都由系统来管理。但是,当状态发生迁移,程序可以通过一个形似于onXX()的方法调用来得到一个通知。因此,可以通过在活动类中重载这些方法,让Android在合适的时候调用。Figure 2.3:活动生命周期 onCreate(Bundle): 这个函数是在活动第一次启动时调用。可以用来做 ”一次” 初始化, 比如,创建用户接口。onCreate( )有一个参数,可以是Null或者是一些由onSaveInstanceState()方法存储的状态信息。 onStart( ): 这个方法是表明活动即将显示给用户。 onResume( ): 在活动可以开始和用户交互时被调用。一般是在这里启动动画和音乐播放。 onPause( ): 这个方法在活动被切换到背景时被调用。原因一般是因为另一个活动要在前端被启动。这个函数一般用作程序一致性状态存储。比如,正在被编辑的数据库纪录。 onStop( ): 当活动不在对用户可见而且在一段时间内也不需要时调用这个方法。如果内存占用比较多的时候,onStop( ) 将不会被调用。(系统可以直接终止进程). onRestart( ): 如果这个方法被调用就表明,你的活动将从stop状态重新激活并显示给用户。 onDestroy( ): 在活动被销毁之前会调用这个方法。如果内存占用较多。onDestroy( ) 将不会被调用。(系统可以直接终止进程). onSaveInstanceState(Bundle): Android 通过这个方法,允许活动存储每个实例的状态,比如鼠标在文本框中的位置。一般情况下,程序员勿需重载这个函数,因为,默认的实现就会自动存储所有用户接口控件的状态。 onRestoreInstanceState(Bundle): 调用这个方法可以当把一个用onSaveInstanceState()保存的状态重新初始化。默认的实现会恢复程序用户接口的所有状态。为了给新的活动挪出空间,任何没有在前台运行的活动都可能随时被停止。同时那些包含这些活动的进程,也可能被Kill掉。因为这种事情时常发生,所以在做程序设计时要考虑到这种情况。在某些情况下,onPause()方法是最后被调用的函数,所以,在这个方法中要保存下次启动时要使用的所有数据。除了管理程序的生命周期,Android框架也提供许多方便编写程序的模块。Building Blocks开发人员必须熟悉一些Android中的对象。其中最重要的是Activities, Intents, 服务和Content Providers. ActivitiesActivity就是用户接口屏幕. 一个应用程序可以定义一个或多个activities 以便处理程序的不同阶段。每个activity应该负责存储自己的状态。IntentsIntent是用来描述一个特定动作的机制。比如, “挑选照片” “打电话回家,” 或者是 “打开吊舱舱门”。在Android中,一切都和intents相关。因此有许多机会可以替换或重用组件。比如,有一个intent是关于“发送电子邮件”。如果一个程序需要发送电子邮件就可以直接调用这个intent。此外,也可以写一个心得email程序,并注册一个activity去处理那个intent。这样就可以替换标准的mail程序。ServicesService就是在后台运行的任务。它不用和用户进行交互。就和UNIX的守护进程类似。比如,音乐播放器,就可以用activity来启动。当用户切换到其它程序时还可以继续播放。因此,进行实际播放的代码应该是一个服务。稍后,另一个activity将会和这个服务绑定,在进行歌曲切换或停止播放。Android本身有很多内建的服务,并可以通过相应的API进行访问。Content ProvidersContent provider就是一组数据,通过特定的API进行读写。这是在应用程序间共享数据的最好方法。比如,Google 提供一个通讯簿的 content provider。所有的信息包括:名字,地址,电话号码等等。这些信息可以被任何应用程序使用。使用资源资源就是程序将使用的,保存在本地的文本,位图和其它非编码信息。在编译程序的时候,所有资源将被编译进应用程序中。所有资源将被放在项目工程的 res 文件夹中。Android的资源编译器aapt是按照资源所处的子文件夹和资源文件的格式来进行处理的。比如,PNG和JPG格式位图应被放在 res/drawable 文件夹, 描绘屏幕布局的XML 文件应该被放在res/layout 文件夹下面。资源编译器压缩和打包程序的资源,然后生成一个名叫R的类。这个类包含程序使用的那些资源标示符。这和用关键字符串引用标准的Java资源有点不一样。这样做的好处是Android能确保所有的引用是有效的。而且由于不用存储所有资源的键值,宝贵的空间能把节省下来。Eclipse 自身也是采用这个方法。安全可靠如前所述,每一个应用程序运行在它自己的Linux进程。在硬件禁止一个进程访问另一个进程的内存。此外,每个应用程序被分配一个特定的用户ID。每个应用程序创建的任何文件都不能被其他应用程序访问。此外,进入某些关键业务会受到限制,为了访问它们,程序员必须在一个名叫Manifest.xml的文件中明确请求许可使用这些操作。当应用程序被安装好后,Package manager将基于授权要么许可,要么不许可。如果必要,还可以给用户进行提示。下面列出一些常见的许可: INTERNET: 访问 Internet. READ_CONTACTS: 读但不能写用户的通讯簿。 WRITE_CONTACTS: 写但不能读用户的通讯簿。 RECEIVE_SMS: 监控收到的短信。 ACCESS_COARSE_L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年英语教师学期工作总结模版
- 放学后班级管理
- 软件培训课件制作规范
- 湖北省恩施州鹤峰县2025届七年级数学第二学期期末检测模拟试题含解析
- 2025届湖北省武汉市新观察八年级数学第二学期期末监测模拟试题含解析
- 大学生职业规划大赛《建筑电气与智能化专业》生涯发展展示
- 大学生职业规划大赛《新能源材料与器件专业》生涯发展展示
- 动态护理查房
- 小儿常见急症护理
- 公司培训系统构建与实施
- 网络与信息安全管理员考试题+参考答案解析
- 视频录制合同协议书
- 退役士兵劳动合同协议
- 八年级会考地理试卷及答案人教版
- 《故宫公开课》课件
- 《智能家居系统介绍》课件
- 2025-2030年中国证券融资融券市场需求态势及投资风险预测研究报告
- 淘宝运营考试试题及答案
- 急性脑梗塞患者护理查房
- 2025年河南郑州航空港科创投资集团有限公司招聘笔试参考题库含答案解析
- 腾讯学院培训课件
评论
0/150
提交评论