1. 系统架构

Android的总体系统架构由四个大的层次组成:

1) Linux内核

Android构建在一个较为稳定的基础之上:Linux内核。Android使用Linux完成其内存管理、进程管理、网络和其他操作系统服务工作。开发期间需要的某些实用程序要和Linux打交道,例如adb shell命令打开一个Linux shell,从中可以输入要在设备上运行的其他命令。

2) 本机库

Linux内核层上面一层中包含了Android的本机库,这些共享库都是用C或C++语言编写的,并且针对手机使用的特定硬件架构进行了编译,并已由手机制造商预先安装到手机中。最重要的一些本机库包括:界面管理器,2D和3D图形,媒体编解码器,SQL数据库,Android附带的Java核心库五个部分组成。

3) 应用程序框架

位于本机库和运行时上面的是应用程序框架层,该层提供了在创建应用程序时需要使用的各种高级构建块,它包括活动管理器,内容提供者,资源管理器,位置管理器,通知管理器五个最重要部分。

4) 应用程序和小部件

最高层是应用程序和小部件层,应用程序是与用户交互的程序,小部件则只能在应用程序主屏幕中的小矩形框中操作。


2. 窗口管理

Android中有一个前台应用程序,它通常会占据除状态栏以外的所有屏幕空间,用户开机时,看到的第一个应用程序是Home应用程序。用户在运行应用程序时,Android会启动该程序并将其置于前台。所有程序和窗口都被系统的活动管理器记录在应用程序栈中,用户可随时按Back按钮返回到栈中的上一个窗口。

从内部来看,每个用户界面窗口都是通过一个Activity类表示的,而每个活动都有其自己的生命周期。在Android中,即使其进程被结束,相应的应用程序仍然存活,活动的生命周期与进程的生命周期没有关系,进程只是各种活动可随意使用的一个容器。

Android程序中的每个活动在其存在期间都会处理以下多种状态之一,改变状态时,系统会通过onXXX()方法通知开发人员:

1) onCreate(Bundle): 首次启动活动时会调用该方法,可使用该方法执行一些初始化操作。

2) onStart(): 该方法说明了将要显示给用户的活动。

3) onResume(): 用户可以开始与活动进行交互时会调用该方法。

4) onPause(): 活动将要进入后台时会运行该方法。

5) onStop(): 用户不再看到某个活动,或一段时间内不需要某个活动时,可以调用该方法。

6) onRestart(): 如果调用该方法,表明要将已处理停止状态的活动重新显示。

7) onDestroy(): 销毁活动前会调用该方法。

8) onSaveInstanceState(Bundle): Android调用该方法的作用是让活动可以保存每个实例的状态。

9) onRestoreInstanceState(Bundle): 使用onSaveInstanceState()方法以前保存的状态重新初始化某个活动时会调用该方法。

没有在前台中运行的活动可能被停止,或者容纳这些活动的Linux进程被结束,从而为新活动腾出空间,有时onPause()方法可能是活动中调用的最后一个方法,所以才应在该方法中保存下次要继续使用的任何数据。


3. 构建块

Android中最重要的一些对象是活动、意图、服务和内容提供者。一个活动就是一个用户界面屏幕,应用程序可以定义一个或多个活动用以处理程序不同阶段的任务,每个活动都要保存自己的状态,以便日后还原这些状态。意图是一种描述具体动作的机制,比如拍照、拔电话等,Android中几乎所有事情都要经历意图阶段,所以有很多机会可替换或重用很多组件。服务是在后台运行的任务,无需与用户直接交互,类似UNIX的守护进程。内容提供者是封装在自定义API中的一组数据,可以读取该数据和向API中写入数据,这是在应用程序之间共享全局数据的最佳方式。

资源是程序需要的本地化后的文本字符串、位图或其他少量的非代码信息。程序生成时,所需的所有资源都会被编译到应用程序中。资源由开发人员创建并存储在项目内的res目录中,Android资源编译器会根据资源所处的子文件夹以及文件的格式来处理这些资源,可以给资源目录名称添加后缀来支持针对特定语言、屏幕方向或像素密度的自定义资源。资源编译器会将资源压缩并打包,生成一个名为R的类,其中包含的标识符可用于在程序中引用这些资源,所以Android可以确保所有引用都是用效的,还可以节省空间,因为它不必存储所有这些资源键。


4. 安全性

每个应用程序都在其自己的Linux进程中运行,硬件禁止一个进程访问其他进程的内存。每个应用程序都被分配了一个具体的用户ID,某个应用程序所创建的任何文件都不能被其他应用程序读写。另外,对某些关键操作的访问也是有限制的,必须在一个名为AndroidManifest.xml的文件中明确请求获得所需的权限。安装应用程序时,软件包管理器会根据证书以及用户提示的情况授予或不授予这些权限,以下是常用的一些权限:

1) INTERNET: 访问因特网。

2) READ_CONTACTS: 读取(但不能写入)用户的联系人数据。

3) WRITE_CONTACTS: 写入(但不能读取)用户的联系人数据。

4) RECEIVE_SMS: 监视收到的SMS短信。

5) ACCESS_COARSE_LOCATION: 使用不太精确的位置提供者,如手机基站或Wi-Fi。

6) ACCESS_FINE_LOCATION: 使用更为精确的位置提供者,如GPS。

Android甚至可以限制对整个系统各部分的访问,通过在AndroidManifest.xml中使用XML标签,可以限制谁能启动活动、启动服务或绑定到服务、向接收者广播意图,或者访问内容提供者中的数据。



本文出自 “青锋笔记” 博客,谢绝转载!

更多相关文章

  1. 使用jQuery Mobile和Phone Gap开发Android应用程序
  2. Android(安卓)Studio(4)---开发人员工作流程基础
  3. Android应用程序进程启动过程的源代码分析
  4. 利用HTML5开发Android笔记(中篇)
  5. Android应用程序注册广播接收器(registerReceiver)的过程分析
  6. Android高级开发第三讲--应用程序基础
  7. Android应用程序进程启动过程的源代码分析
  8. 从头学Android之Android的数据存储--SQLite
  9. Android快速调试方法

随机推荐

  1. android中使用surfaceview进行视频播放
  2. Android(安卓)PopupMenu显示
  3. android获取网页数据的几种方式
  4. android中用到的资源Color
  5. AndroidAnnotations——Injecting Views
  6. 水波纹效果---3环波纹
  7. Android:Android布局方式
  8. andriod之ContentProvider读取外部存储图
  9. android 使用sharedPreferences保存用户
  10. android获取manifast.xml里面meta信息