一、Android简单介绍:
Android是基于Linux内核的软件平台和操作系统;
它采用了软件堆层(software stack,又名软件叠层)的架构,主要分为三部分:
1) 底层以Linux核心为基础,由c语言开发,只提供基本功能。
2) 中间层包括函数库Library和虚拟机Virtual Machine,由C+开发。
3) 最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自 行开发,以java编写。
Android 应用程序:
一般情况Android应用程序是由以下四种组件构造而成的:
活动(activities)
广播接收器(BroadcastReceiver)
服务(service)
内容提供器(content provider)
需要注意的是,并不是每个Andorid应用程序都必须构建这4个组件,有些可能由这些组件的组合而成。
每个应用在独立的Linux进程中加载运行析构,一个应用的崩溃不会波及别的应用;
一个应用可以调用其它应用的模块而不用link这些模块的代码。Android应用没有单一的应用入口;
一旦你确定了你的应用程序中需要的组件,那么你就应在AndroidManifest.xml中列出他们。
这是一个XML配置文件,它用于定义应用程序中需要的组件、组件的功能及必要条件等。这个文件是必须的。
详解:活动
活动是最基本的Andorid应用程序组件,应用程序中,一个活动通常就是一个单独的屏幕。每一个活动都被实现为一个独立的类,并且从活动基类中继承而来, 活动类将会显 示由视图控件组成的用户接口,并对事件做出响应。 大多数的应用是由多屏幕显示组成。当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态并且压入历史堆栈中。 用户可以通过回退操回到以前打开过的屏幕。我们可以选择性的移除一些没有必要保留的屏幕,因为Android会把每个从桌面打开的程序保留在堆栈中。
一个activity有四个状态:
﹡ 当activity在前台:active或者running状态
﹡ 当activity不在前台但是可见(被不完全覆盖):pause状态
﹡ 当activity在后台:stop状态
在stop和pause状态下,该activity程序保留在历史堆栈中,但是当系统内存不足时有可能迫使activity结束并释放内存以及以及结束其进程;当它需要重新显示时再重新加载;
Activity的生命周期:
onCreat(),onStart(),onResume(),onRestart(),onPause(),onStop(),onDestory()
大家可以参考该博客:http://www.cnblogs.com/lyp3314/archive/2011/11/10/2244971.html点击打开链接
详解:广播接收器
你可以使用BroadcastReceiver来让你的应用对一个外部的事件做出响应。
比如:当电话呼入时,数据网络可用时,或者到了晚上时。
BroadcastReceivers不能显示UI,它只能通过 NotificationManager 来通知用户这些有趣的事情发生了。
BroadcastReceivers既可以在AndroidManifest.xml中注册, 也可以在代码中使用Context.registerReceiver()进行注册。
但这些有趣的事情发生时,你的应用不必对请求调用BroadcastReceivers,系统会在需要的时候启动你的应用,并在必要情况下触发BroadcastReceivers。
各种应用还可以通过使用Context.sendBroadcast() 将它们自己的intent broadcasts广播给其它应用程序。
大家可以参考该博客:http://blog.csdn.net/huangbiao86/article/details/6668525点击打开链接
详解:服务
一个服务是具有一段较长生命周期且没有用户界面的程序。
比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。
在一个媒体播放器的应用中,应该会有多个活动,让使用者可以选择歌曲并播放歌曲。
然而,音乐重放这个功能并没有对应的活动,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。
在这个例子中,媒体播放器这个活动会使用Context.startService() 来启动一个服务,从而可以在后台保持音乐的播放。
同时,系统也将保持这个服务一直执行,直到这个service运行结束。
(你可以通过阅读Life Cycle of an Android Application 获取更多关于服务的介绍). 另外,我们还可以通过使用Context.bindService() 方法,
连接到一个服务上(如果这个服务还没有运行将启动它)。 当连接到一个服务之后,我们还可以通过服务提供的接口与它进行通讯。
拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。
大家可以参考该博客:http://blog.csdn.net/guolin_blog/article/details/11952435
详解:内容提供器
应用程序能够将它们的数据保存到文件、SQLite数据库中,甚至是任何有效的设备中。
当你想将你的应用数据与其它的应用共享时,内容提供其将会很有用。
一个内容提供器类实现了一组标准的方法,从而能够让其它的应用保存或读取此内容提供器处理的各种数据类型。
更详细的内容提供器资料,
大家可以参考该博客:http://blog.csdn.net/yhaolpz/article/details/51304345
Android 应用程序模块: 应用, 任务, 进程, 和线程
在大多数操作系统里,存在独立的一个1对1的可执行文件(如Windows里的exe文件), 它可以产生进程,并能和界面图标、应用进行用户交互。
但在Android里,这是不固定的,理解将这些分散的部分如何进行组合是非常重要的。
由于Android这种可灵活变通的,在实现一个应用不同部分时你需要理解一些基础技术:
一个android 包 (简称 .apk ) ,里面包含应用程序的代码以及资源。这是一个应用发布,用户能下载并安装他们设备上的文件。
一个 任务 ,通常用户能当它为一个“应用程序”来启动:通常在桌面上会有一个图标可以来启动任务,这是一个上层的应用,可以将你的任务切换到前台来。
一个 进程 是一个底层的代码运行级别的核心进程。通常.apk包里所有代码运行在一个进程里,一个进程对于一个.apk包;然而, 进程 标签常用来改变代码运行的位置,可以 是 全部的.apk包 或者是独立的 活动, 接收器, 服务, 或者 提供器组件。
进程
在Android中,进程是应用程序的完整实现,而不是用户通常了解的那样。他们主要用途很简单:
提高稳定性和安全性,将不信任或者不稳定的代码移动到其他进程。
可将多个.apk包运行在同一个进程里减少系统开销。
帮助系统管理资源,将重要的代码放在一个单独的进程里,这样就可以单独销毁应用程序的其他部分。
像前面描述的一样,进程的属性被用来控制那些有特殊应用组件运行的进程。
注意这个属性不能违反系统安全: 如果两个.apk包不能共享同一个用户ID,却试图运行在通一个进程里,这种情况是不被允许的,事实上系统将会创建两个不同的进程。
Android应用构成
Android应用是由各种各样的组件来构成。
这些组件大部分都是松散连接的,准确 的说你可以把它们看成组件的联合而非是一个单一的应用。
通常,这些组件运行在同一个系统进程里面。你也可以在这个进程里面创建多个线程 (这是很常见的),如果必要你也可以创建独立的子进程。
不过这种情况是非常少见的, 因为Android尽力使代码进程间透明。
以下部分是很重要的Android APIs:
AndroidManifest.xml
AndroidManifest.xml 是系统的控制文件,它告诉系统如何处理你所创建的所有 顶层组件(尤其是activities,服务,Intent接收器和后面描述的内容管理器)。
举例 来说,控制文件就是把你的活动(Activities)要接收的Intents连接在一起的“胶水”。
活动(Activities)
活动(Activity)就是一个有生命周期的对象。 一个Activity就是完成某些工作的代码块, 如必要的话,这部分工作还可能包括对用户UI界面的显示。
不过这不是必须的,有些活 动从不显示UI界面。典型地,你将会指定你的应用程序中的一个活动为整个程序的入口点。
视图(Views)
视图(Views)可以将其自身绘制到屏幕上。Android的用户界面由一系列的视图树 (trees of views)构成。
接口都是由一组以树的形式出现的视图组成的。开发者可 以通过创建一个新的视图的方法来使用自定义的图形处理技术(比如开发游戏,或者是 使用了不常用的用户图
形(UI)窗口界面(widget))。
Intents
Intents是一个简单的消息对象,它表示程序想做某事的“意图”(intention)。
比如如果你的应用程序想要显示一个网页,那么它通过创建一个Intent实例并将其传递给 系统来表示意图浏览这个URI。
系统将定位于知道如何能处理这一Intent的代码(在当 前情况下就是浏览器),并运行之。Intents也可以用于广播系统范围内的有效事件 (例如通知事件)。
服务(Services)
服务是运行在后台的一段代码。它可以运行在它自己的进程,也可以运行在其他应用程 序进程的上下文(context)里面,这取决于自身的需要.。
其它的组件可以绑定到一个服 务(Service)上面,通过远程过程调用(RPC)来调用这个方法。
例如媒体播放器的服务, 当用户退出媒体选择用户界面,她仍然希望音乐依然可以继续播放,这时就是由服务 (service)来保证当用户界面关闭时音乐继续播放的。
通知(Notifications)
通知将以小图标的形式呈现在状态栏里,用户通过与图标的交互式操来接收消息。
最常见 的通知包括短信息,通话记录,语音邮件,但是应用程序也可以创建它们自己的通知事件。
我们推荐采用通知事件实现提醒用户的注意。
内容管理器(ContentProviders)
内容管理器(ContentProvider)提供对设备上数据进行访问的数据仓库。
典型的例子就 是使用内容管理器来访问联系人列表。
你的应用程序也可以使用其它程序通过内容管理器提 供的数据,同时你也可以定义你自己的内容管理器来向其它应用提供数据访问服务。
存、取、提供数据
典型的桌面操作系统一般能提供一种通用的文件系统,所有应用程序都能储存和读文件,并且其他应用程序也能访问该文件(可能需要一些访问控制设置)
Android使用不同的方式:在平台上,所有应用程序的数据(包括文件),对该应用程序是私有的。
当然,Android也提供一种标准方法将自己的私有数据提供给其他应用程序访问。
这一章节讲了很多方法,描述应用如何存取数据,以及将数据提供给其他程序访问,当然,你也可以向其他应用程序请求并获得它的数据。
Android提供下面的方式来存取数据:
1.文件
你可以将你的文件存储在设备上或者其他移动媒介上,默认情况下,其他应用程序是不能访问这些文件的。
2.数据库
Android有直接SQLite数据库的API。应用程序可以创建以及使用SQLite数据库。 每个包创建的数据库都是私有的。
Android SDK提供了编写应用程序的一些基本包,常用的如下:
android.util
包含有许多底层的工具类,例如专用容器类,XML工具等等。
android.os
提供基本的操作系统服务、消息传递和进程间通讯。
android.graphics
核心图形绘制包。
android.text, android.text.method, android.text.style, and android.text.util
提供丰富的文本处理工具、富文本支持以及输入法等等。
android.database
包含数据库相关的底层API。
android.content
提供大量的访问存储在设备上的数据的服务:安装在设备上的应用及相关资源,用于持续的动态数据的内容提供器(content provider)。
android.view
核心用户界面框架。
android.widget
提供构建view包的标准用户界面元素(列表、按钮、布局管理器等等)。
android.app
提供高层应用模型,通过活动实现。
总结:在这里对安卓做了一个大体概述,具体知识点将在后期博客中更新,敬请期待。
下章预告:Android编译环境的搭建(一)