# 第十七章 下一步学习方向 通过之前的文章,我们了解了各类开发工具、探索了应用程序项目中所包含的基本要素、学 习用户界面设计、交互性、资源以及数据的使用机制,另外我们也全面追踪了应用程序运行的整个过程。到目前为止,我们已经介绍过的知识足以帮助大家从非常理想的起点开始进行Android应用程序开发,但Android所提供的发挥空间还远不止这些、因此开发中的可能性也几乎没有穷尽。因此,我们需要为自己 的下一步学习选择明确的方向。在今天的文章中,我们将把全部注意力集中在可资选择的未来学习对象上。在本系列教程的下一篇文章——也就是最后一篇文章里, 我们将通过一项测验回顾曾经了解过的各项知识。 通过阅读本系列教程,大家应该已经在创建Android应用时拥有多种可以选择的潜在发展方向。当然,如果大家已经规划好了具体的开发项目,那么由 此带来的实际需求已经足以指导各位明确未来的学习路线。不过Android平台所提供的元素极为丰富,而且其中很多应用元素都普遍适用于我们将要接触的大 多数应用。在今天的文章中,我们将近距离观察一部分实用性最高的主题,并以此为起点建立体系完整的Android开发技能。 ### 1. 数据 **第一步** 大家可以利用我们之前创建好的示例应用项目尝试下面将要介绍的各种Android开发技巧。请注意,我们原先是把数据保存在shared preferences当中,因此大家可以选择将数据保存在文件内。我们要做的是尝试让用户利用EditText视图以及功能按钮实现数据的提交与保存。 将用户数据写入到一个文件当中,让应用程序在启动时读取其内容并把结果显示在TextView视图当中。通过这种方式,大家可以实现持久性数据的保存,从 而在应用程序下一次运行时加以使用。 **第二步** 另一项重要技能在于从远程资源,例如Web服务,当中获取数据。为了实现这一目标,我们需要在Activity类当中添加一个内部 AsyncTask类,并借此进行远程数据获取。在获取到数据之后,还需将其显示在应用程序当中。此外,如果应用程序获取到的是XML、JSON或者其它 一些常见数据格式,大家可能还希望对其加以解析或者进行格式调整。参阅谷歌官方提供的“[连接到网络](http://developer.android.com/training/basics/network-ops/connecting.html)”部分的说明,其中提供的示例代码足以作为理想的起步素材。 **第三步** 另一种主要数据存储选项同样适用于很多应用程序的实际需求,这就是使用SQLite数据库。大家可以通过创建一个SQLiteOpenHelper 类来尝试这种方式,在这里我们需要定义该斩架构,例如表和列。在应用程序的其它部分,我们可以要求SQLiteOpenHelper类将数据写入到数据库 中并利用游标实现内容读取,从而将结果显示在应用程序的用户界面当中。再次提醒大家,我们可能需要将用户输入的数据保存在数据库当中,并在应用程序下一次 启动时显示结果。除了向数据库中插入记录并对其进行查询之外,大家还可以尝试更新并删除记录。作为初次上手的起点,我们不妨先从阅读谷歌官方提供的“[在SQLite数据库中保存数据](http://developer.android.com/training/basics/data-storage/databases.html)”说明开始。 ### 2. 应用屏幕 **第一步** 在已经创建完成的应用程序当中,我们只在用户界面当中使用了一个操作屏幕。接下来,大家可以通过在应用中创建第二个activity类来增加屏幕数 量,即顺序打开File、New、Class菜单选项。今天的任务是在第一个屏幕——也就是主activity当中添加一个按钮,并在用户点触该按钮时启 动第二个activity。举例来说,如果我们开发的是一款游戏应用,那么该按钮所显示的文本内容可以是“游戏说明”,而第二个activity的名称则 可以被设为How.java。为第二个activity创建一个布局文件,其中包含一个将文本内容保存在res/values字符串XML文件中的 TextView。如果我们使用的示例应用如上所述是一款游戏的话,那么第二个activity中应该包含关于游戏操作与进行方式的信息。应用程序中的大 部分信息显示都可以遵循这种简单的处理方式。 在第一个activity的onClick处理程序中,大家可以利用intents启动“游戏说明”activity。一旦我们在应用程序中包含了 第二个activity,则需要利用putExtra方法向其提交来自第一个activity的数据。大家也可以尝试反过来让第二个activity执行 某些任务,并把获得的结果提供给第一个activity。后者需要通过onActivityResult方法来接收结果数据。请大家[点击此处](http://developer.android.com/reference/android/app/Activity.html)查看谷歌官方提供的“Activity类引用”说明以了解更多与此相关的知识。 **第二步** 作为下一个步骤,大家可以尝试在自己的activity当中包含多个不同用户界面视图。大家还会注意到,不同类型的视图需要通过不同的方式加以实 现。在大家熟练掌握了不同视图类型的使用方法之后,接下来可以尝试使用fragment——这样我们就能够在应用程序的不同部分中重复使用用户界面的各个 组成元素了。 另一种实用性极高的用户界面组件要数list视图。在list视图中,屏幕会显示一份包含多种条目的列表。系统会利用adapter将来自数据源的 信息填充到list视图当中,也就是实现由数据到视图的映射。大家可以利用ListActivity来取代标准的Activity类。在list activity当中,大家可以对方法集进行重写以响应用户与列表内条目的交互操作。作为学习list视图的开端,大家可以首先认真阅读谷歌官方提供的[list视图功能示例](http://developer.android.com/guide/topics/ui/layout/listview.html)。 一般来说,应用程序在外观与使用体验上最好能够与Android系统本身保持一致。只要可能,大家应该尽量利用标准化Android用户界面元素而非创建自己的定制组件。从这一理由出发,大家可能希望了解更多关于[Action Bar](http://developer.android.com/training/basics/actionbar/index.html)的知识,并始终提醒自己在设计用户界面以及应用程序的导航模式时遵循上述结论。 ### 3. 多媒体 大家可以在自己创建的Android应用程序当中使用多种媒体类型,例如音频与视频、动画以及通过设备摄像头所捕捉到的图片乃至视频等。 Android系统提供一系列标准方法,大家可以借此访问设备资源(例如摄像头)并实现特定使用需求(例如进行视频记录)。请大家查看《Android开 发者指南》中的“[多媒体指南](http://developer.android.com/training/building-multimedia.html)”一节以获取更多信息。 正如我们在本系列教程中所提到,大家可以在Android应用程序当中利用XML创建视觉元素、从而获得属于自己的可绘制组件。大家也可以利用 XML来定义动画,并通过代码控制动画的播放效果。在Android平台上,我们可以利用动画为用户界面添加各种动态效果——系统支持的效果数量繁多,其 中包括淡入淡出、旋转、翻转以及其它各种过渡类型。大家点击此处参阅谷歌官方提供的“[添加动画](http://developer.android.com/training/animation/index.html)”说明。 ### 4. 与其它应用程序交互 **第一步** 在Android平台上进行应用程序开发的优势之一在于,我们可以充满利用平台所提供的现有资源,其中包括其它应用程序。正如我在本系列教程的前几 篇文章中所提到,大家可以在不同应用程序之间实现数据共享并在自己的应用中使用这些共享数据。大家还可以允许用户利用电子邮件、即时消息以及社交网络等方 式在我们的应用当中共享内容。最简单也最可靠的数据共享途径就是利用send意图。当我们的应用程序启动一条send活动时,操作系统会为用户提供一份应 用程序列表、其中罗列了用户可以将内容发送至哪些目标处。请大家在着手尝试之前认真阅读谷歌官方提供的“[向其它应用发送简单数据](http://developer.android.com/training/sharing/send.html)”说明,其中还包含几个示例。 **第二步** 除了使用send之外,我们还可以利用其它多种方式实现从应用程序内部启用Android资源,因此请大家在自己的项目多多进行尝试。举例来说,大 家可以利用dial来拨出电话号码、利用view在浏览器中查看见面或者使用地图应用中的位置信息。大家还可以从设备的内置传感器处获取数据,从而使自己 的应用程序能够捕捉并处理与位置及周边环境相关的数据。在多数情况下,我们可以通过在action启动结束时在应用程序与Android环境之间建立起对 话,并向应用程序返回信息时触发其它action。利用这种方式,我们的应用程序就可以充分利用Android设备所提供的移动特性。 ### 5. 资源 **第一步** 我们已经讨论了未来学习的几大主要潜在方向,但事实上大家所接触的仍然只是Android平台颇为表面化的浅层次知识。这套平台仍然在不断变化,而 可行性名单也会变得越来越长。针对常见任务的推荐性技术也会定期变更,因此如果大家希望能一直开发出高品质的Android应用程序,请记住不断学习才是 最重要的职业习惯。 下面我再为大家推荐一些实用性很高的学习资源: 访问[Android开发者博客](http://android-developers.blogspot.co.uk/)来获取关于这套平台的最新及未来发展趋势。该博客还经常提供一些功能性代码示例,可以作为很好的学习素材。 [Vogella Android指南](http://www.vogella.com/android.html)是网络上现有的最具Android学习资源之一。Vogella网站通常会提供一些完整的技术示例项目,旨在对官方开发者指南当中所涉及的专业知识进行详细讲解。 [Google+上的Android开发者交流平台](https://plus.google.com/+AndroidDevelopers/posts)经常发布大量公告与Android开发讨论话题,同样值得大家多加关注。 正如其它开发平台一样,大家会在学习Android的过程中发现更多无法确定的问题,其中大部分都需要通过网络搜索加以解决。正如大家所了解,很多常见问题都能在[Stack Overflow](http://stackoverflow.com/questions/tagged/android)上找到答案——如果各位还不是该网站的常客,请马上去逛逛吧。 ### 结论 在本系列教程当中,我的目标是帮助大家学习关于Android开发的基础知识。如果各位过去曾经学习过编程或者开发技能,肯定清楚本系列教程还远远 不是探索的终点。如果大家有意继续为Android平台开发应用,则需要熟练运用本教程所介绍的知识并将其作为Android工具箱中的财富好好加以保 管。作为本系列教程的结尾,我将在下一篇文章中提供一项测试、看看大家有没有真正掌握之前提到的内容——请做好准备吧!