文章 1 - Android 简介
对 Android 进行比较和简要描述,对每一位初学者 Android 开发者都有帮助。
将要涵盖的主题
引言
近年来,移动应用程序开发在收入和由此创造的就业机会方面都迅速增长。本文将简要总结和概述当今最流行的移动应用程序开发平台——强大的 Android。
本文清晰地比较了为什么开发者应该关注在其他移动平台之上开发 Android。此外,还讨论了 Android 架构栈不同层的高层概述以及 Android 应用基本构成要素的组件。如果您是 Android 发烧友,喜欢玩代码并希望用它来制作精美的应用程序,那么让我们深入 Android 的海洋吧!
(来源:http://www.spotrip.net/en/surf/app-surf-morocco/)
Android 的历史
我们都知道,如今 Google 拥有 Android,对吧?但我们有多少人知道 Android 的过往历史呢?是的,今天的 Google 备受瞩目的 Android OS 背后有着一段激动人心的历史。Android Inc. 由 Andy Rubin、Rich Miner、Nick Sears 和 Chris White 于 2003 年 10 月创立。你知道有趣的部分是什么吗?Android 是 Andy Rubin 对他喜爱机器人的昵称。当时他们正试图为数码相机构建一个操作系统。
当然,后来的历史很宏大。让我们看看这段历史中的一些关键点,以更好地理解当时的状况。由于数码相机的市场机会有限,Rubin 和他的团队后来将注意力转向了智能手机。之后,他的朋友 Steve Perlman 用 10,000 美元的现金资助了 Rubin 的工作。
2005 年,Google 收购了 Android Inc.,随后 Rubin 和他的团队致力于构建一个基于 Linux 内核的移动设备平台。2007 年 11 月 5 日,Google 正式宣布开发 Android OS。Android Beta 版于当天发布,因此 11 月 5 日是 Android 的生日。首个商业版本 Android 1.0(API 级别 1)于 2008 年 9 月发布,同月还发布了 SDK(软件开发工具包)。首个官方代号 “Cupcake”(Android 1.5,API 级别 3)于 2009 年 4 月 27 日发布。我们或多或少都知道后来的历史,按顺序(按代号)是——Donut(1.6)、Éclair(2.0)、Froyo(2.2)、Gingerbread(2.3)、Honeycomb(3.0)、Ice Cream Sandwich(4.0)、Jelly Bean(4.1),以及现在最新的 Kitkat(4.4)。
等等,可能有一件事我们需要了解更多。那个标志性的可爱的 Android Logo 是怎么回事?你们有人想过它,或者知道它的来源吗?简而言之,它来自著名的《星球大战》机器人 R2-D2。目前的 Logo 是由 Irina Block 设计的,尽管 Dan Morrill 设计了该 Logo 的早期版本。
图:Android 版本 (来源:tech.firstpost.com)
开始之前
本文仅仅是即将到来的 Android 开发教程系列的一个开端。因此,要进行开发,或者说要编写 Android 应用,你需要对 JAVA 和 OOP 有良好的掌握,才能在 Android 平台上感到舒适。如果你觉得知识不够,没问题,花些时间学习 JAVA 和 OOP。
欢迎来到 Android
最后,欢迎您来到迷人的 Android 世界。您是否对有个好的开始感到兴奋?让我们深入了解一下。
从理论上讲,你可以将其理解为具有人形的机器人,但从技术上讲,它是一个基于 Linux 内核的开源操作系统,目前由 Google 拥有和维护,主要用于智能手机和平板电脑设备。请牢记一点,目前 Android 是世界上最受欢迎的移动操作系统。你注意到全球智能手机应用的趋势了吗?是的,你可以认为 Android 是引领潮流的变革。
是的,在现阶段,你可能在想为什么你应该在 Android 上开发应用,相比市场上其他成熟的移动操作系统有什么优势。你绝对是一个善于思考的人!
(来源:http://androidadvantage.blogspot.com/)
让我们明智地思考一下——
- Android 是一个开源操作系统,所以它是免费的,可以自由使用。
- 你肯定会考虑你的应用程序的全球分发,对吧?在世界上有许多地区,其他移动操作系统无法与 Android 的受欢迎程度相提并论(考虑中国和其他亚洲国家,那里 90% 的智能手机操作系统都是 Android)。
- Android 覆盖了不同制造商生产的各种硬件。因此,开发者绝对有优势利用这些硬件功能。
- 2014 年的统计数据显示,Android 拥有 80.2% 的智能手机市场份额,75% 的移动应用程序开发者正在为 Android 平台开发应用程序。那么,你是否感受到了你的下一个应用程序的市场份量?
- 你可以免费使用你所有的开发工具,并可以在家使用你的电脑进行开发(无论你是 Mac、Windows 还是 Linux)。
- 关于启动,在发布你的应用程序时,你期望有什么要求?合理的开发者注册费、广泛的应用分发渠道、更大的社区等等。Android 将提供所有这些。Google Play(Android 应用最大的市场)的开发者注册只需 25 美元即可开户,与其他移动平台的市场相比,对初学者来说非常容易。
- 用户反馈对于提高应用程序质量非常重要。Android 拥有庞大的用户群,发布应用后你会很快收到他们的反馈。这直接促使你提高应用的性能。
- 或多或少,开发者或程序员都了解 Java,并对 OOP 有概念。因此,与使用其他移动平台相比,他们更容易在最短的时间内适应 Android 平台。
- Android 也有一个庞大的开发者社区。如果你在编写代码时遇到问题,你会立即得到他们的回应,这对新手非常有帮助。
- 与提供其他移动平台的设备相比,Android 设备价格便宜。作为开发者,你通常需要在发布应用程序到市场之前在真实设备上进行测试。那时,你肯定会因为 Android 便宜的价格而感到舒适。
所以现在你可以反向思考,为什么你不在所有这些便利设施的推动下开发 Android 应用呢?找一个理由不去开始呢?
让我们从开发者的角度仔细比较一下近年来最常用的 3 种移动操作系统(即 Android vs. iOS vs. Windows Phone)。
|
Android |
iOS |
Windows Phone |
开发版 |
|
Apple |
Microsoft |
应用程序商店 |
Google Play |
App Store |
Windows Phone Marketplace |
可用应用 |
120 万+ |
120 万+ |
245,000+ |
核心 |
Linux |
Darwin |
Windows NT |
用户界面 |
图标和窗口小部件 |
基于图标 |
基于磁贴 |
开发者账号注册费 |
一次性 25 美元 |
每年 99 美元 |
每年 99 美元 |
主要编程语言 |
JAVA |
Objective-C |
C# |
源代码模型 |
开源 |
闭源 |
闭源 |
市场份额 |
80.2% |
14.8% |
3.5% |
用户数 (百万) |
900 |
600 |
12 |
每个应用的下载量 |
60,000 |
40,000 |
4,062 |
Android 概述
你可以将 Android OS 看作是一个由不同层组成的软件栈。每一层都是一组程序组件,为其上一层提供不同的服务。
Android 架构栈由 4 个主要层组成
- Linux 内核
- 库和 Android 运行时
- 应用程序框架 &
- 应用程序
Linux 内核
位于架构栈的底部,是 Android 系统的基本层。它从不与开发者或用户交互,而是提供设备硬件和其他架构层之间的抽象级别。
让我们检查一下这一层的功能,以了解其重要性
- 内存管理
- 电源管理
- 硬件抽象
- 进程管理
- 设备管理
- 安全设置
- 网络栈
- 硬件驱动程序
那么,这一层通过完成所有这些繁重的工作,使操作系统对我们来说相对轻松,不是吗?
库
这一层包含所有 Android 原生库。那么,库是什么意思?库包含一组指令,用于指导设备处理不同类型的数据。它们通常用 C 或 C++ 编写,并负责特定的硬件。
让我们看看一些原生的 Android 关键库及其功能
- Webkit:浏览器引擎,允许在应用内进行网页浏览。
- OpenGL:3D 图形
- SGL:2D 图形
- Surface Manager:屏幕上的复合窗口管理器。
- SQLite :数据库引擎,共享和存储应用程序数据
- SSL:互联网安全
- Media:允许录制和播放不同的媒体格式。
- Libc:系统 C 库。
- Net:提供对网络栈的访问
- Hardware:提供对硬件的访问。
- OS:提供对操作系统服务的访问
- Widget:提供 UI 组件集合(例如 Button、Label 等)
Android运行时
包含 Android 核心库以及一个名为 Dalvik 虚拟机的关键组件,这是一个为 Android 优化和专门设计的 Java 虚拟机。Dalvik 由 Dan Bornstein 开发,不运行 .class 文件,而是运行 .dex 文件。 .dex 文件是在编译时从 .class 文件构建的,并确保在低资源环境(例如手机和平板电脑设备)中具有更高的效率。它负责在 Android 设备上运行应用程序。
它允许同时创建多个虚拟机实例,提供进程隔离、安全内存管理和线程支持。Dalvik 还提供了一套核心库,使应用程序开发者能够使用标准的 Java 编程语言编写 Android 应用程序。
应用程序框架
应用程序直接交互的层。管理设备的基本功能。如果你是应用程序开发者,你需要在你的应用程序中处理这项服务。
让我们看看它提供的一些关键服务
- Activity Manager – 管理应用程序的活动生命周期。
- Content Providers – 允许应用程序与其他应用程序共享数据。
- Resource Manager – 管理我们应用内的各种资源,例如字符串、颜色设置。
- Telephony Manager – 管理所有语音通话。如果我们要访问应用程序中的语音通话,我们应该使用它。
- Notifications Manager – 允许应用程序向用户显示警报和通知。
- Location Manager – 提供对位置服务的访问。允许应用程序通过 GPS 或蜂窝塔接收有关位置更改的更新。
应用
Android 架构栈的最顶层。这就是我们的应用程序所在的位置,包括用户安装的原生应用程序和第三方应用程序。总之,你编写的应用程序将安装在这个层。开发者和用户都从他们的角度关心这个级别。
每个设备都预装了一些标准应用程序,例如
- SMS
- 拨号器
- 网络浏览器
- 联系人管理器
- 电子邮件
- 游戏等。
让我们一目了然地查看架构栈
作为一名应用程序开发者,你需要使用这些模块来构建你的 Android 应用。这些模块充当系统进入你应用程序的门户。你也可以将它们视为组件。
一个 Android 应用程序可能由几个这样的组件组成,如 Activity、Service 或 Intent。所有这些都应该在 AndroidManifest.xml 文件中定义(稍后我们将讨论它到底是什么)。
让我们看看构成 Android 应用程序功能的几个基本组件。
Activity
可能是应用中最重要的组件,它只代表一个带有用户界面的单一屏幕。这是用户与之交互的组件。你的应用程序可能包含多个活动,它们可能彼此松散地连接。
因此,作为用户,你下载了一个应用程序,点击应用图标,然后出现一个带有图片或数据的页面/屏幕/窗口。是的,一个或多个活动正在幕后工作。作为开发者,你的想法不同,你需要向用户展示或计算或告知某些内容。因此,你需要处理 Activity,你的应用程序性能将取决于你管理应用程序活动状态的好坏。你可能明白了,对吧?
哦,我们上面已经听说过活动状态了,那是什么?非常非常仔细地阅读这段引述——
引用“每个活动的状态由其在活动堆栈中的位置决定,活动堆栈包含所有当前正在运行的活动。新活动被放置在堆栈的顶部。如果用户使用“返回”按钮导航返回,或者前台活动被关闭,那么堆栈中下一个活动就会移到前面并变为活动。”(来源:http://www.cs.ccsu.edu/)
现在是时候检查 Android 活动生命周期,以便更清晰地了解它们如何工作了
图:Android 活动生命周期。(来源:Tutorialspoint.com)
那么,这些应用状态的功能是什么,请继续阅读
- onCreate():在活动首次创建时调用。
- onStart():在活动对用户可见时调用。
- onResume():在活动开始与用户交互时调用。
- onPause():当前活动正在暂停且前一个活动正在恢复时调用。
- onStop():在活动对用户不再可见时调用。
- onDestroy():在活动被系统销毁之前调用。
- onRestart():在活动已停止并重新启动时调用。
让我们看一些代码示例,这些示例可以让你对活动生命周期有实际的体验——
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
toast("In onCreate");
}
public void onStart() {
super.onStart();
toast("In onStart");
}
public void onRestart() {
super.onRestart();
toast("In onRestart");
}
public void onResume() {
super.onResume();
toast("In onResume");
}
public void onPause() {
super.onPause();
toast("In onPause");
}
public void onStop() {
super.onStop();
toast("In onStop.");
}
public void onDestroy() {
super.onStop();
toast("In onDestroy.");
}
private void toast(String string) {
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, string, duration);
toast.show();
}
}
在你的 Android 环境中运行上面的代码,你可能会对活动有一个清晰的认识。
Service
一个在后台运行的组件,在用户不知情的情况下执行耗时任务,并且没有 UI。这就是用户不知道其任务的原因。通常为远程进程执行工作。不像活动那样有许多状态,所以容易控制,只需启动和停止即可。
好吧,我们经常玩迷宫游戏,或者记笔记,或者在 Facebook 上聊天,同时屏幕后面播放着我们喜欢的音乐。是的,服务可能会在幕后播放音乐。你对 Android 设备上的通知消息熟悉吗?那也是一个服务。
内容提供者
简而言之,这个模块或组件存储和检索数据,并使其可供所有应用程序访问。你可以将数据存储在 SQLite 数据库或网上,或任何其他持久存储位置。通过内容提供者,其他应用程序可以查询甚至修改数据(如果内容提供者允许)。
广播接收器
一个响应系统范围广播通知的组件,并在 Android 应用中注册为接收器。例如,拍摄了照片或电池状态。另一个例子是,当用户在使用一个应用程序时,如果来了一个电话,广播接收器会通知你的应用程序,然后你可以编写代码来处理这种中断。这个组件没有视觉表示,也不会在内存中主动运行,你可以将自己的广播从你应用程序的一个部分发送到另一个部分,或者发送到完全不同的应用程序。
关注点
正如本文前面所提到的,Android 是一个广阔的海洋。本文阐明了 Android 的一些非常基本且重要的要点,解释了为什么你应该转向 Android 开发,以及它与其他流行的移动应用程序开发平台之间的区别。Android 架构和关键组件的简要概述将激发你对开发的兴趣。在进行新平台上的任何开发工作之前,了解该平台的基本知识以及为什么你应该对留在该平台上感到兴趣非常重要。本文可能在大多数情况下能回答你关于 Android 的问题。在接下来的文章中,我们肯定会讨论开发。在此之前,祝你在 Android 的旅程中玩得开心。快乐的 droiding!
(来源:http://www.bewallpaper.com/)
参考
一些对你很有用的参考资料,可以增强你的知识
文章历史
2014.11.08 - 格式化段落链接。
2014.08.08 - 修正拼写错误和代码格式。
2014.07.08 - 添加了图片引用和有用的网站引用。
2014.06.08 - 添加了代码示例。
2014.03.08 - 发布了主文章。