黄宏大Android外文翻译.docx
- 文档编号:12822074
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:32
- 大小:98.69KB
黄宏大Android外文翻译.docx
《黄宏大Android外文翻译.docx》由会员分享,可在线阅读,更多相关《黄宏大Android外文翻译.docx(32页珍藏版)》请在冰点文库上搜索。
黄宏大Android外文翻译
1什么是Android
1.1主要技巧和思想
●历史的嵌入式器件编程
●开放手机联盟的解释
●第一眼看到Android的主屏幕
可以这么说,暂时,传统的桌面应用程序开发者已经被惯坏了。
这个不是说桌面应用程序开发比其他形式的开发很简单。
总之,作为传统桌面的应用程序开发者,凡是我们能想象到的各种应用程序,我们就一定有能力创造。
包括我自己,因为我也是从做桌面程序开始的。
一方面已经使得桌面程序更容易理解就是我们已经有能力去跟桌面操作系统相互作用,因此,任何底部的硬件很自由的相互作用。
这种类型独立自主的程序编制,然而,对于很小的开发者团体来说是不敢冒险的去搞手机发展这样浑浊的技术的。
注解:
我提到两种不同的开发商在此讨论:
传统的桌面应用程序开发,他们能在任何语言环境下工作,而且最终的产品和程序是用来运行“桌面”操作系统的;还有Android程序开发者,那些开发Android平台开发工具的JAVA程序开发人员。
这不是说跟其他人比起来谁好谁坏。
其实,区别目的仅仅在于想说明并比较Android桌面操作系统环境的开发风格,工具。
1.2嵌入式器件编程的简要历史
有很长一段时间,手机的开发者由大的著名嵌入式的开发团队中的少数人组成,作为嵌入式设备的开发者。
相对于桌面开发或者后续的网络开发,被视作更少“魅力”,而且嵌入式设备的开发通常因为硬件和操作系统而处于劣势。
因为嵌入式设备的制造商们太小气,他们要保护他们硬件方面的秘密,所以他们给开发者们非常有限的库去运行当他们尝试去让一些特定的设备去相互作用。
嵌入设备与桌面系统显著不同的一部分是嵌入设备是个有特色的“芯片上的电脑”。
例如:
考虑你的标准电话遥控。
这个并不是一个非常强大并且复杂性的技术。
当任何的按钮被按下去,一个芯片解释一个信号以一种方式已经被编程进了这个设备。
这个允许设备知道什么是从输入设备(键盘)来的需要。
并且如何的响应这些命令(比如,打开电视机)。
这个是一个简单的嵌入式设备的编程。
总之,不管你相不相信,像这样的简单设备绝对的和早期的手机设备开发的根源有着紧密的联系。
大多数的嵌入式设备运行(有些仍然还在运行)在私有的操作系统。
原因是选择创建一个私有的操作系统而不是用任何消费系统是产品的需要。
简单的设备不需要非常健全和优化的操作系统。
作为一个产品的演化,更多复杂的嵌入式设备,如早期的PDA,家庭安全系统和GPS等。
5年前某种程度上都转移标准的操作系统平台上。
小的操作系统如Linux,甚至一个微软版本的嵌入式平台,已经在嵌入设备上变得普遍了。
设备改革的这段时间里,手机从其他嵌入式设备中分支出去。
走上了自己的轨道,这个分支是显而易见的当你去调查他们的体系结构。
在他们最初开始的时候,手机作为一个外围设备并且运行私有软件,而这些软件被制造商们所拥有和控制,而且几乎可以被认为是一个“关闭”的系统。
习惯使用私有操作系统主要是制造商自己开发硬件,或者至少定义了开发的目的只是用来运行手机。
最终的结果就是使开放成为不可能。
现有的软件包或者解决方案会可靠的和他们的硬件交互。
而且,制造商想要保护他们硬件的商业秘密。
以防允许进入而发现设备软件的水准。
所以风尚就是,而且大多数仍然是使用完全私有并且关闭的软件来运行他们的设备。
任何人想为手机开发程序必须需要详尽的私有环境来运行软件的知识。
而解决方案就是直接从制造商那里购买昂贵的开发工具。
这就孤立了很多的“自制软件”的开发者。
注解:
一个关于自制软件开发的文化包含了手机程序的开发。
“自制软件”是指开发者通常不是工作在手机开发公司内,通常利用自己的时间在他们的设备上生产小的,一次性的产品。
另外,使手机开发无法出手的是硬件制造商对于“内存和需要”左右为难的解决方案。
直到最近,手机才能执行比打出和接听电话,查找联系人,发送和接收短消息。
不是今天“瑞士军刀”的技术。
及时在2002年,在消费者的手上,带照相机的手机还是不多见。
在1997年,小的应用程序如计算器和游戏爬进了手机内,但是强大的功能仍然是手机的拨号盘本身。
手机还不想今天一样是一个多用途,多功能工具。
没有人预见互联网浏览的需求,MP3播放,或者更多的是我们今天定制的功能。
在1997年,手机制造商们没有预见消费者需要的是一个一体化的设备。
但是,即使这个需求展现出来,设备内存和存储容量还是一个需要克服的大的障碍。
更多的人可能想要他们的设备是一个多功能一体化的工具,但是制造商们不许跨越他们的障碍。
让问题变得简单,就要在任何的设备让内存来存储并运行程序,包括手机。
手机作为一个设备,直到最近还没有足够多内存来执行“额外”的程序。
在最近的两年里,内存的价格已经达到了非常低的水平。
设备制造商们有足够的能力压低价格来包含更多的内存。
很多的现在的手机标准内存已经超过了90年代中期电脑内存。
于是,现在我们有需求,而且有内存。
我们可以直接跳到为手机开发酷的应用程序了,对吗?
不完全是这样。
设备的制造商们仍然紧密的保护他们的操作系统。
有一些在手机上开放JAVA为基础的小运行环境。
更多的是不允许。
即使允许运行JAVA应用程序但还是不允许进入核心的系统。
而这些是桌面开发者习惯于拥有的。
1.3开放手机联盟和Android
这个对于应用程序开发的障碍开始在2007年的11月份被打破,当Google在开放手机联盟下发布Android。
开放手机联盟是一个硬件和软件开发者的集合,包括谷歌,NTTDoCoMo,SprintNextel和HTC。
他们的目标是创建一个更多的开放手机环境。
在开放联盟第一个被发布的产品就是移动设备操作系统Android。
(更多关于开放手机联盟的信息,见:
)。
对于这个Android的发布,谷歌使很多开发工具和向导成为可能来帮助在新
系统上可能的开发者。
帮助系统,平台软件开发包(SDK),甚至一个开发者的论坛,可以在谷歌的Android的网站上找到,
注解:
谷歌为了推动这个新的Android操作系统,甚至为寻找新的Android程序而设立了1000万美元的奖金。
当手机运行Linux,Windows或者即使PalmOS的手机是很容易找到,如本文所述,没有硬件平台已经宣告可以来运行Android.HTC,LG电子,摩托罗拉和三星都是开发手机成员,在Android的发布下,我们希望在不久的将来有一些Android为基的设备。
在2007年11月发布时,系统自身还仍旧是一个测试版的程序。
这是个对开发者的好新闻因为它给了我们一个罕见的提前看到将来的设备和有机会来开始开发应用程序,而当硬件发布时就可以运行。
注解:
这个策略明确的给了开放手机联盟一个大的优势,超越其它手机操作系统开发者。
因为当第一代设备发布时会有数不尽的可用开发程序可以运行。
1.4介绍Android
Android,作为一个系统,是一个运行在Linux2.6核心上的JAVA基础的操
作系统。
系统是非常轻量型的而且全特性。
Android应用程序用JAVA开发而且很容易被放置到新的平台上。
如果你没
有下载JAVA或者不确定那一个版本你需要,我在第二章详细列出了开发环境的
安装。
其他Android的特点包括一个加速3-D图形引擎(基于硬件支持),被SQLite推动的数据库支持,和一个完整的网页浏览器。
如果你熟悉JAVA编程或者是任何种类的OOP开发者,你可能使用程序用户接口(UI)开发-那就是,UI安置是直接在程序代码中有句柄的。
Android,识别并许可UI开发,而且支持新生,XML为基础的UI布局。
XMLUI布局对普通桌面开发者是一个非常新的概念。
我会在本书的相关章节里描述XMLUI布局和程序化UI开发。
Android另一个更令人激动和关注的特点是因为它的样式,第三方应用程序---包括“自制的”---会和系统捆绑的有着同样的优先权。
这是和大多数系统不同之处,但是给了嵌入式系统程序一个比由第三方开发者创建的线性优先权大的优先执行权。
而且,每一个应用程序在虚拟计算机上以一个非常轻量的方式按照自己的线路执行。
除了大量的SDK和成型的类库可以用之外,对激动人心的特性对于Android的开发者来说是我们现在可以进入到操作系统可以进入的地方。
也就是说,如果你要创建一个应用程序打一个电话,你已经进入到电话的拨号盘。
加入你要创建一个应用程序来使用电话内部的GPS(如果安装了),你已经进入了。
对于开发者创建动态和令人好奇的程序已经敞开大门。
Android的一些特征和上面这些可用的特点相同,谷歌已经非常迫切的奉送一些特性。
Android的开发者可以将自己的应用程序和谷歌提供的如谷歌地图和无所不在的谷歌搜索绑在一起。
假设你要写程序在谷歌地图上显示一个来电话者的的位置,或者你要储存一般的搜索结果到你的联系人中。
在Android中,这个门已经完全打开。
2应用程序:
HelloWorld
2.1主要技巧和思想
●创建新的Android项目
●用View工作
●用一个TextView
●修改main.xml文件
●在Android虚拟机上运行一个应用程序
在这一章中,你将创建你的第一个Android活动,这一章从头到尾的检查应用程序的创建过程,我将给你们演示怎么去创建一个Android项目在Eclipese,在最初的文件里添加代码,并且在Android虚拟机上运行最终的应用程序,在Android环境下运行的最终结果的应用将是一个完全的功能项目
实际上,当你看到这一章,你将不止创建一个Android的活动,在计算机编程的传统规定中,你的第一个应用将是典型的HelloWorld!
应用程序,所以在第一节的内容中你将创建一个标准的HelloWorld!
应用程序,仅仅使用一个空白的背景和一个“HelloWorld!
”文本。
然后,为了让您更好的了解该语言,下一节详细的解释Android为了你的HelloWorld!
应用程序自动的产生文件。
在这个活动中你将创建两个重复的过程,每一个都是使用不同技术信息显示在屏幕上,而且你建创建两个不同版本的HelloWorld!
应用程序将展示“HelloWorld!
”信息的画面,这将给你一个很好的介绍关于Android的控制和内部的工作。
注解:
你将经常看到“application”和“Activity”相互交换着应用,他们两个之间的不同就是应用程序可以有多个活动,但是一个应用程序必须至少有一个活动。
你的应用程序的每一个窗口或者是屏幕就是一个分开的活动。
因此,如果你创建了一个相当简单的应用程序仅仅使用了一个屏幕的数据(就像在这一章中的HelloWorld!
应用程序),那就只有一个活动,在后来的章节里面你将创建许许多多的活动。
为了确保你可以完全很好的看到Android程序的整体,在第六章你将在Android软件开发包命令行编译在微软windows和Linux环境下同时创建这些应用程序。
换句话说在这一章中包含了在Eclipse环境下创建项目的全过程。
第六章也包含了利用命令行编译工具创建项目的过程。
因此,在继续学习之前,你应当检查你的Eclipse环境是否配置的正确。
复习第三章中为Android开发包配置PATH变量的步骤,你也应当确保你的JRE中的PATH变量是否正确。
忠告:
如果你还有任何配置相关的问题的话,你可以去看第二章和第三章的内容,或者是看看Android开发包的文档。
2.2在Eclipse上创建你的第一个Android项目
为了开始你的第一个Android项目,打开Eclipse。
当你第一次打开Eclipse的时候,它会打开一个空的开发环境,那就是你开始的地方。
你的第一个任务就是为你的应用程序建立和命名你的工作区,选择→文件→新建→Android项目,这就是你运行新的Android项目的向导。
警告:
在新建项目菜单中不能选择java项目。
但是Android应用程序就是用java语言写的,跟你所做的所有的java工程,这个建议将创建一个标准的Java应用程序,选择Android项目就是让你创建一个Android特有的应用程序。
2.3新的Android项目向导为你准备了两件事情
一个绑住Android开发包的壳程序。
这个将允许你使用所有Android库和包来进行编码工作,并且允许你在合适的环境中调试程序。
新程序的第一个壳文件。
这些壳文件包含一些必要的支撑你将要编写程序的文件。
就如同一个在VisualStudio中,它会在你的文件中产生的一些代码。
使用Eclipse中的Android项目向导产生一些初始的程序文件和一些Android创建的代码。
另外,新的Android项目向导还包含一些选项,显示你必须为你的Android项目启动设置的东西。
在项目的名称那个字段,只是为了举例,使用HelloWorld!
Text这个名字,这个名字非常的容易把这个HelloWorld!
项目从其它你将要在本章中创建的项目分别开。
在内容那个区域,保持系统默认的选择:
在工作区中创建一个新的项目这个选项按钮必须被选中。
并且使用系统默认的位置这个选择框也应当被选中。
这个将允许Eclipse在你系统默认的工作区路径中创建你的项目。
这样做的好处是十分容易对你的项目进行排序,管理和查找。
例如,如果你在工作在一个Unix基础的开发环境中,这个路径指向Home路径。
如果你工作在一个Windows的环境中,工作路径将会是C:
/Users/
然而,不管任何一些原因,你可能需要选中系统默认位置的选择框并且选择一个其它的路径。
如果是这样的话,不管那个位置的选项,自己选一个好了。
例如,你可能希望将你在这本书中的项目保存在一个不同的位置跟其他你自己创建的项目分开。
如果如此,简单的覆盖位置,你自己可以自订一个位置目录给这个项目。
3应用程序基础
Android应用程序是用Java程序语言写的。
AndroidSDK工具编译代码后,把它和其他数据和资源文件一起打包到一个Android包中,这个存档文件使用.apk作为后缀。
很多时候,每一个android应用程序都只存在于自己的世界:
●默认情况下,每一个的应用程序都运行在自己的Linux进程中。
当android启动进程时,应用程序的组件就需要被执行。
然后当不需要或系统必须为其他应用程序恢复记忆时再关闭进程。
●每一个进程都有自己的虚拟机,因此应用程序的代码可以独立于其他应用程序的代码而运行。
●系统默认地分配给每个应用程序一个唯一的Linux用户ID,权限被设置以致于应用程序的文件仅仅被用户和应用程序自己可以看到---虽然有方法导出到其他应用程序。
它可以让两个应用程序共享相同的Linux用户ID;在这种情况下,它们可以互相访问对方的文件。
为了节省系统资源,具有相同用户ID的应用程序也能够运行在同样的Linux进程中,同时也能够分享共同的VM中。
3.1应用程序组件
Android的一个核心特性就是一个应用程序可以使用其它应用程序的元素(前提是那些应用程序允许提供)。
例如,如果你的应用程序需要展示一个图片卷动列表,而另一个应用程序已经开发了一个合用的照片卷轴而别的应用程序也可以使用的话,你可以直接调用那个卷轴来完成工作,而不用你自己再开发。
你的应用程序并没有吸纳其它应
(1)Activity
activity是为用户操作而提供的可视化用户界面。
例如,一个activity可以提供一个菜单项列表供用户选择,或者可以把一些图片连同它们的标题一起显示。
一个文本消息传递应用程序可能会有一个用于显示要发送消息到的联系人列表的activity第二个activity用来写消息来选择联系人。
另一个activity用来查阅以前的短信或改变设置。
尽管它们一起组成一个内聚的用户界面,但每个activity都保持相互独立。
每一个都实现以Activity类为基类的子类。
一个应用程序可能只有一个activity,或者,如刚才提到的文本消息应用程序那样,包含很多个。
每个activity的作用是什么,以及多少个activity,当然是取决于应用程序的设计。
一般情况下,第一个被标记的activity在应用程序启动的时呈现给用户。
从一个activity转向另一个靠的是用当前的activity启动下一个来完成的。
每个activity都被给予一个默认的窗口来进行绘制。
通常情况下,这个窗口是满屏的,但它也可以是一个比屏幕小的位于其它窗口之上的浮动的窗口。
一个activity也可以使用附加的窗口——例如,一个在activity运行过程中弹出的要求用户响应的对话框,或者屏幕上有特殊选项供用户选择的显示必要信息的一个窗口。
窗口的可视内容是由一系列层次化view构成的,基本视图类派生的对象。
每个view控制着窗口中一块特定的矩形区域。
父级views包含并组织其子类view的布局。
叶节点view(位于层次结构最底端)在它们控制的矩形区域进行绘制,并对用户直达其区域的操作作出响应。
因此,view是activity与用户进行交互的界面。
例如,view可以显示一个小图片,并在用户点击它的时候产生动作。
Android有很多现成的视图供开发者使用——包括按钮、文本域、滚动条、菜单、复选框等等。
视图的层次结构是由Activity.setContentView()方法放入activity的窗口之中的。
contentview是位于层次结构根位置的View对象。
(更多信息,请参考单独的用户界面文档视图和层次结构。
)
(2)Service
service没有可视化的用户界面,而是无限期在后台运行。
例如,一个service可以在用户做其它事情的时候播放背景音乐、从网络上获取数据或者计算一些东西并提供运算结果给activity使用。
每个service都继承Service基类。
一个典型例子是媒体播放器播放来自播放列表中的歌曲。
播放器应用程序可能有一个或多个activity来给用户去选择歌曲并进行播放。
然而,音乐播放这个任务本身不应该由任何activity来处理,因为用户希望即使在他们离开播放器开始做别的事情时,音乐仍然在继续播放。
为达到这个目的,媒体播放器activity可以启动一个运行在后台的service服务。
系统仍维持音乐播放的service的运行,即使这个activity已经离开屏幕。
连接至(绑定)一个正在运行的service(如果service没有运行,则启动)是可能的。
连接后,你可以通过一个接口与service进行通讯。
对于音乐service来说,这个接口可以允许用户暂停、回退、停止以及恢复播放。
如同activity和其它的组件一样,service服务运行在应用程序进程的主线程内。
所以它不会对其它组件或者用户界面有任何的阻碍作用,它们一般会派生一个新线程来执行一些时间消耗型任务(比如音乐回放和网络下载)。
参见稍后的进程和线程介绍。
(3)BroadcastReceiver
broadcastreceiver是一个与注于接收广播通知信息并做出处理的组件。
很多广播是由系统代码产生——例如,通知时区改变、电池电量低、拍摄了一张照片或用户改变了语言选项。
应用程序也可发起广播——例如,通知其它应用程序一些数据已经下载到设备并处于可用状态。
一个应用程序可以拥有任意数量的broadcastreceiver,以对任何它认为重要的通知信息作出各种响应。
所有的receiver都继承自BroadcastReceiver基类。
broadcastreceiver没有显示用户界面。
然而,它们可以启动一个activity或者service来对它们收到的信息做出响应,或者也可以使用NotificationManager来通知用户。
通知可以用多种方式来获取用户的注意力──闪动背光灯、震动设备、播放声音等等。
通知一般是在状态栏上放一个持续的图标,用户可以点击打开它并获取消息。
(4)Contentprovider
contentprovider将一些特定应用程序数据提供给其它应用程序使用处理。
数据可以存储在文件系统、SQLite数据库或其它任何有意义的方式。
contentprovider继承于ContentProvider基类,实现了使得其他应用程序能够检索和存储它所管理的类型数据的标准方法。
然而,应用程序并不能直接调用方法,而是使用一个ContentResolver对象,来代替调用它的方法。
ContentResolver可以与任何的contentprovider进行交互;与其合作对任何相关的进程间通讯进行管理。
参阅独立的ContentProviders文档,以获得更多的关于使用contentprovider的信息。
每当出现一个需要被特定组件处理的请求时,Android会确保该组件的应用程序进程处于运行状态,必要时启动它,并确保那个组件的一个合适的实例可用,必要时创建那个实例。
3.2激活组件:
intent
当接收到ContentResolver发出的请求后,contentprovider就会被激活。
而其它三种组件——activity、service和broadcastreceiver,被一种叫做intent的异步消息所激活。
intent是一个保存消息内容的Intent对象。
对于activity和service来说,它指明了被请求的操作名称,并指定了用来操作的数据的URI和其它一些事情。
例如,它可以传达一个请求让它为用户显示一张图片,或者让用户编辑一些文本的activity。
对于broadcastreceiver来说,Intent对象指明了被通报的操作。
例如,它可以对所有感兴趣的对象通报照相按钮被按下。
对于每种组件来说,激活的方法也不同:
(1)一activity通过IntentContext.startActivity()或者Activity.startActivityForResult来启动(或指定新的东西)另外一个activity。
响应的activity可以通过调用自身的getIntent()方法来查看并且激活它的intent。
Android通过调用activity的onNewIntent()方法来传递给它随后的任何intent。
一个activity经常启动另一个activity。
如果它期望所启动的那个activity返回一个结果,它会调用startActivityForResult()而不是startActivity()。
例如,如果它启动一个activity以使用户挑选一张照片,它可能会返回被选中的照片。
其结果将会被封装在一个Intent对象中,并传递给发出调用的activity的onActivityResult()方法。
(2)通过一个意图对象Context.startService()以启动一个service(或给出新的指令进行服务)。
Android调用此service的onStart()方法并将Intent对象传递给它。
与此类似,一个intent可以被传递给Context.bindService()建立一个处于调用组件和目标service中间的活动连接。
service通过onBind()方法的调用来获取此Intent对象(如果此service未运行,bindService()会先启动它)。
例如,一个activity可以建立一个不前述的音乐回放service的联系,这样它就可以提供给用户一些途径(用户界面)来控制回放。
这个activity可以调用bindService()来建立此连接,然后调用service中定之的方法来控制回放。
稍后,远程方法调用一节有关于如何绑定至一个service的细节内容。
(3)应用程序能够通过
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 宏大 Android 外文 翻译
![提示](https://static.bingdoc.com/images/bang_tan.gif)