Hello Android 第三版 (二)
2010年09月08日
第二章框架
2.1 框架图
Linux内核
Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。
原生库(Native Library)
在Linux内核之上的是Android的原生库,这些库均采用C或者C++编写的,与硬件结合非常紧密。其中重要的原生库主要有:
Surface Manager:对显示子系统的管理,类似于Vista或Compiz的窗体管理器,但是比这些简单得多。
2D和3G Graphics:在Android中,单一的用户界面均可由2D或者3D的元素组成。提供2D和3D方面的渲染和处理。比如OpenGL等。
Media Codecs:Android提供了对大部分主流的音视频的编解码功能。
SQL数据库:在Android中,提供了一个轻量级的SQLite数据库引擎,这个数据库同样在FireFox和苹果的iPhone中使用。主要完成数据的持久化存储。
Browser engine:为了更快速的显示HTML内容,Android中使用了WebKit库。
系统运行库
系统运行库主要由Dalvik虚拟机和Java核心库组成。
应用程序框架
活动管理器(Activity Manager):控制应用程序的生命周期并提供常用的导航回退功能。
内容提供器(Content providers):使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。
资源管理器(Resource manager):提供非代码资源的访问,如本地字符串,图形,和布局文件。
位置管理器(Location manager):任何一部Android操作系统的手机均能够识别所处的位置。
通知管理器(Notification manager):使得应用程序可以在状态栏中显示自定义的提示信息。
应用程序和widgets
这是整个系统架构的最高层,主要包括拨打电话、发送邮件、联系人管理、web浏览等等用户经常使用的应用程序和小工具。
2.2 活动的生命周期及转换
每一个活动(Activity)都处于某一个状态,对于开发者来说,是无法控制其应用程序处于某一个状态的,这些均由系统来完成。但是当一个活动的状态发生改变的时候,开发者可以通过调用onXX()的方法获取到相关的通知信息。
在实现Activity类的时候,通过覆盖(override)这些方法即可在你需要处理的时候来调用。
onCreate:当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工作。onCreate方法有一个参数,该参数可以为空(null),也可以是之前调用onSaveInstanceState()方法保存的状态信息。
onStart:该方法的触发表示所属活动将被展现给用户。
onResume:当一个活动和用户发生交互的时候,触发该方法。
onPause:当一个正在前台运行的活动因为其他的活动需要前台运行而转入后台运行的时候,触发该方法。这时候需要将活动的状态持久化,比如正在编辑的数据库记录等。
onStop:当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,系统会直接结束这个活动,而不会触发onStop方法。
onRestart:当处于停止状态的活动需要再次展现给用户的时候,触发该方法。
onDestroy:当活动销毁的时候,触发该方法。和onStop方法一样,如果内存紧张,系统会直接结束这个活动而不会触发该方法。
onSaveInstanceState:系统调用该方法,允许活动保存之前的状态,比如说在一串字符串中的光标所处的位置等。通常情况下,开发者不需要重写覆盖该方法,在默认的实现中,已经提供了自动保存活动所涉及到的用户界面组件的所有状态信息。
活动如果没有在前台运行,都将被停止或者Linux管理进程为了给新的活动预留足够的存储空间而随时结束这些活动。因此对于开发者来说,在设计应用程序的时候,必须时刻牢记这一原则。在一些情况下,onPause方法或许是活动触发的最后的方法,因此开发者需要在这个时候保存需要保存的信息。
2.3 组件
在Android系统中,提供了很多重要的组件,其中对于开发人员来说,最重要的主要有活动(activites)、意图(intents)、service(服务)、内容提供器(content providers)。
活动(activities)
活动简单的说就是一个用户界面。应用程序可以由多个用户界面组成,分别对应不同的阶段。
意图(intents)
Intent是描述某一个操作的机制,比如说获取一张照片。在Android系统中,几乎所有的工作都通过Intent来完成,因此对于开发者来说,需要经常与Intent打交道。
服务(services)
服务是运行在后台,不与用户直接交互的程序,比如unix中的守护进程。比如音乐播放器,用户希望通过一个活动(activity)开始播放音乐,然后可以运行其他的软件,而不用关闭正在播放的音乐。
内容提供器(Content provider)
内容提供器是一组封装了读写方法的数据集合。采用这种方式能更好的在不同的应用程序之间共享全局数据。
2.4 资源
资源是指本地化的字符串、位图、或其他的非程序代码的东西。在编译应用的时候,这些资源将被编译到应用程序中。
2.5 安全性
由于Android是基于Linux操作系统的,因此其应用程序的运行管理方式与Linux一样,每一个应用程序均运行在自身所属的Linux进程空间里面。硬件平台禁止进程访问其他进程的内存空间。另外,每一个应用程序都会标注上一个特定的用户编号,它所创建的任何文件都不能被其他的应用程序访问。
另外,访问临界操作会受到严格的控制,必须在androidmanifest.xml文件中进行申请。安装应用的时候,包管理器(package manager)根据申请进行授权。下面是一些特别重要的权限:
INTERNET:访问互联网。
READ_CONTACTS:读取用户联系人数据
WRITE_CONTACTS:写用户联系人数据 RECEIVE_SMS:监控接收到的文字信息
ACCESS_COARSE_LOCATION:调用初级定位器,比如wifi
ACCESS_FINE_LOCATION:调用精确定位器,比如GPS
例如接收短信的监控,需要做如下的配置:
2010年09月08日
第二章框架
2.1 框架图
Linux内核
Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。
原生库(Native Library)
在Linux内核之上的是Android的原生库,这些库均采用C或者C++编写的,与硬件结合非常紧密。其中重要的原生库主要有:
Surface Manager:对显示子系统的管理,类似于Vista或Compiz的窗体管理器,但是比这些简单得多。
2D和3G Graphics:在Android中,单一的用户界面均可由2D或者3D的元素组成。提供2D和3D方面的渲染和处理。比如OpenGL等。
Media Codecs:Android提供了对大部分主流的音视频的编解码功能。
SQL数据库:在Android中,提供了一个轻量级的SQLite数据库引擎,这个数据库同样在FireFox和苹果的iPhone中使用。主要完成数据的持久化存储。
Browser engine:为了更快速的显示HTML内容,Android中使用了WebKit库。
系统运行库
系统运行库主要由Dalvik虚拟机和Java核心库组成。
应用程序框架
活动管理器(Activity Manager):控制应用程序的生命周期并提供常用的导航回退功能。
内容提供器(Content providers):使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。
资源管理器(Resource manager):提供非代码资源的访问,如本地字符串,图形,和布局文件。
位置管理器(Location manager):任何一部Android操作系统的手机均能够识别所处的位置。
通知管理器(Notification manager):使得应用程序可以在状态栏中显示自定义的提示信息。
应用程序和widgets
这是整个系统架构的最高层,主要包括拨打电话、发送邮件、联系人管理、web浏览等等用户经常使用的应用程序和小工具。
2.2 活动的生命周期及转换
每一个活动(Activity)都处于某一个状态,对于开发者来说,是无法控制其应用程序处于某一个状态的,这些均由系统来完成。但是当一个活动的状态发生改变的时候,开发者可以通过调用onXX()的方法获取到相关的通知信息。
在实现Activity类的时候,通过覆盖(override)这些方法即可在你需要处理的时候来调用。
onCreate:当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工作。onCreate方法有一个参数,该参数可以为空(null),也可以是之前调用onSaveInstanceState()方法保存的状态信息。
onStart:该方法的触发表示所属活动将被展现给用户。
onResume:当一个活动和用户发生交互的时候,触发该方法。
onPause:当一个正在前台运行的活动因为其他的活动需要前台运行而转入后台运行的时候,触发该方法。这时候需要将活动的状态持久化,比如正在编辑的数据库记录等。
onStop:当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,系统会直接结束这个活动,而不会触发onStop方法。
onRestart:当处于停止状态的活动需要再次展现给用户的时候,触发该方法。
onDestroy:当活动销毁的时候,触发该方法。和onStop方法一样,如果内存紧张,系统会直接结束这个活动而不会触发该方法。
onSaveInstanceState:系统调用该方法,允许活动保存之前的状态,比如说在一串字符串中的光标所处的位置等。通常情况下,开发者不需要重写覆盖该方法,在默认的实现中,已经提供了自动保存活动所涉及到的用户界面组件的所有状态信息。
活动如果没有在前台运行,都将被停止或者Linux管理进程为了给新的活动预留足够的存储空间而随时结束这些活动。因此对于开发者来说,在设计应用程序的时候,必须时刻牢记这一原则。在一些情况下,onPause方法或许是活动触发的最后的方法,因此开发者需要在这个时候保存需要保存的信息。
2.3 组件
在Android系统中,提供了很多重要的组件,其中对于开发人员来说,最重要的主要有活动(activites)、意图(intents)、service(服务)、内容提供器(content providers)。
活动(activities)
活动简单的说就是一个用户界面。应用程序可以由多个用户界面组成,分别对应不同的阶段。
意图(intents)
Intent是描述某一个操作的机制,比如说获取一张照片。在Android系统中,几乎所有的工作都通过Intent来完成,因此对于开发者来说,需要经常与Intent打交道。
服务(services)
服务是运行在后台,不与用户直接交互的程序,比如unix中的守护进程。比如音乐播放器,用户希望通过一个活动(activity)开始播放音乐,然后可以运行其他的软件,而不用关闭正在播放的音乐。
内容提供器(Content provider)
内容提供器是一组封装了读写方法的数据集合。采用这种方式能更好的在不同的应用程序之间共享全局数据。
2.4 资源
资源是指本地化的字符串、位图、或其他的非程序代码的东西。在编译应用的时候,这些资源将被编译到应用程序中。
2.5 安全性
由于Android是基于Linux操作系统的,因此其应用程序的运行管理方式与Linux一样,每一个应用程序均运行在自身所属的Linux进程空间里面。硬件平台禁止进程访问其他进程的内存空间。另外,每一个应用程序都会标注上一个特定的用户编号,它所创建的任何文件都不能被其他的应用程序访问。
另外,访问临界操作会受到严格的控制,必须在androidmanifest.xml文件中进行申请。安装应用的时候,包管理器(package manager)根据申请进行授权。下面是一些特别重要的权限:
INTERNET:访问互联网。
READ_CONTACTS:读取用户联系人数据
WRITE_CONTACTS:写用户联系人数据 RECEIVE_SMS:监控接收到的文字信息
ACCESS_COARSE_LOCATION:调用初级定位器,比如wifi
ACCESS_FINE_LOCATION:调用精确定位器,比如GPS
例如接收短信的监控,需要做如下的配置: