一、概览

安卓无处不在。手机。平板电脑。由谷歌电视驱动的电视和机顶盒。很快,Android 就会出现在汽车里,飞机上的机上娱乐系统里,甚至机器人里!

然而,Android 设备的一般主题将是更小的屏幕和/或没有硬件键盘。而且,从数字上看,在可预见的未来,Android 很可能主要与智能手机联系在一起。对于开发人员来说,这既有好处也有缺点,如下所述。本章还描述了 Android 应用中的主要组件以及在开发应用时可以利用的 Android 特性。

智能手机编程的优点和缺点

从好的方面来看,安卓风格的智能手机很性感。通过移动设备提供互联网服务可以追溯到 20 世纪 90 年代中期,以及手持设备标记语言(HDML)。然而,只有在最近几年,能够上网的手机才被取消。现在,由于短信等趋势和苹果 iPhone 等产品,可以作为互联网接入设备的手机正迅速受到欢迎。因此,开发 Android 应用让你在快速发展的细分市场(支持互联网的手机)中体验到一种有趣的技术(Android),这总是一件好事。

当你实际上不得不编程时,问题就来了。

任何有 PDA 或手机编程经验的人都曾感受过手机在各种尺寸上都太小的痛苦:

  • 屏幕很小(你不会得到这样的评论,“这是你口袋里的 24 英寸液晶显示器,还是。。。?").
  • 键盘,如果有的话,也很小。
  • 指点设备,如果存在的话,很烦人(任何丢失过手写笔的人都会告诉你),或者不精确(大手指和“多点触控”液晶显示器有时会很烦人。。。有问题)。
  • CPU 速度和内存总是落后于台式机和服务器。

此外,在手机上运行的应用必须处理这样一个事实:它们是在手机上运行的。

当手机不工作时,有手机的人往往会变得非常烦躁。同样,如果你的程序“破坏”了他们的手机,这些人也会变得恼怒

  • 占用中央处理器,这样电话就收不到了。
  • 当有电话打进来或需要拨电话时,它不会悄悄地消失在背景中,因为这个程序与手机操作系统的其他部分不能正常工作。
  • 手机操作系统崩溃,比如像筛子一样漏内存。

因此,为手机开发程序与开发桌面应用、网站或后端服务器进程是不同的体验。工具看起来不同了,框架的行为也不同了,而且你对你的程序有更多的限制。

Android 试图做的是向你妥协:

  • 你得到了一种常用的编程语言(Java)和一些常用的库(例如,一些 Apache Commons APIs),以及对你可能习惯使用的工具的支持(Eclipse)。
  • 你得到了一个相当严格和不常见的框架,你的程序需要在这个框架中运行,这样它们才能成为电话中的“好公民”,而不会干扰其他程序或电话本身的操作。

如你所料,这本书的大部分内容都是关于这个框架,以及你如何在它的范围内编写程序并利用它的能力。

机器人是由什么组成的

当你写一个桌面应用时,你是“你自己领域的主人”你启动你的主窗口和任何需要的子窗口,比如对话框。从你的角度来看,你是你自己的世界,利用操作系统支持的功能,但很大程度上不知道计算机上可能同时运行的任何其他程序。如果您确实与其他程序交互,通常是通过应用编程接口(API),如 Java 数据库连接(JDBC)或其上的框架,来与 MySQL 或其他数据库通信。

Android 也有类似的概念,但它们的包装和结构不同,以使手机更耐撞:

  • Activities :用户界面的构建模块是活动。你可以把一个活动想象成桌面应用中的窗口或对话框,或者经典 web 应用中的页面。Android 旨在支持许多廉价的活动,所以你可以允许用户不断点击以打开新的活动,并点击后退按钮以后退,就像他们在网络浏览器中一样。
  • 服务:活动是短暂的,可以随时关闭。另一方面,服务被设计为在需要时保持运行,独立于任何活动,类似于其他操作系统上的服务或守护进程的概念。您可以使用服务来检查 RSS 提要的更新或播放音乐,即使控制活动不再运行。您还将使用服务来执行计划任务(“cron 作业”)和向设备上的其他应用公开定制 API,尽管这些都是相对高级的功能。
  • 内容提供者:内容提供者为存储在设备上的任何数据提供了一个可由多个应用访问的抽象层。Android 开发模型鼓励您将自己的数据提供给其他应用,以及您自己的应用。构建一个内容供应器可以让您做到这一点,同时保持对数据访问方式的完全控制。内容提供者可以是任何东西,从 web 提要到本地 SQLite 数据库等等。
  • 意图:意图是在设备内部运行的系统消息,通知应用各种事件,从硬件状态变化(例如,插入 SD 卡),到传入数据(例如,短消息服务[SMS]消息到达),到应用事件(例如,您的活动从设备的主菜单启动)。意图很像其他操作系统上的消息或事件。你不仅可以响应一个Intent,还可以创建自己的来启动其他活动,或者在特定情况出现时让你知道(例如,当用户到达某某位置 100 米以内时,引发某某Intent)。

由你支配的东西

  • 存储:你可以把数据文件和你的应用打包成不变的东西,比如图标或者帮助文件。您还可以在设备本身上划出一小块空间,用于存放包含应用所需的用户输入或检索数据的数据库或文件。而且,如果用户提供大容量存储,比如 SD 卡,你可以根据需要在上面读写文件。
  • 网络:安卓设备一般都可以通过一种或另一种通信媒介上网。从原始的 Java 套接字一直到可以嵌入到应用中的内置的基于 WebKit 的 web 浏览器小部件,您可以在任何级别上利用 Internet 访问。
  • 多媒体 : Android 设备有回放和录制音频和视频的能力。虽然具体细节可能因设备而异,但您可以查询设备以了解其功能,然后利用您认为合适的多媒体功能,无论是播放音乐、使用相机拍照还是使用麦克风进行音频笔记。
  • 位置服务 : Android 设备经常可以访问位置供应器,如 GPS 和蜂窝三角定位,这些服务可以告诉您的应用设备在地球表面的位置。反过来,您可以显示地图或利用位置数据,例如在设备被盗时跟踪设备的移动。
  • 电话服务:因为 Android 设备通常是电话,你的软件可以发起呼叫,发送和接收短信,以及做任何你期望从现代电话技术中得到的事情。

大局...这本书的

现在你已经有了 Android 的大图,这是本书接下来的内容: