Android基础 《密西西比河谷州立大学:Android应用程序开发》[1]

来源:互联网 发布:淘宝店铺装修包含哪些 编辑:程序博客网 时间:2024/05/03 01:47

第一层:Linux操作系统和驱动(Linux kernel):C语言实现。

Android核心系统服务依赖于Linux2.6内核,包括:安全性、内存管理、进程管理、网络协议、驱动模型Linux内核也作为硬件和软件栈之间的抽象层。

除了标准的Linux内核外,Android还增加了内核的驱动程序:Binder(IPC)驱动、显示驱动、输入设备驱动、音频系统驱动、摄像头驱动、WiFi驱动、蓝牙驱动、电源管理。


第二层:本地框架和Java运行环境(LIBRARIES  ANDROID RUNTIME)

本地框架是有C/C++实现。包含C/C++库,被Android系统中不同组件使用,它们通过Android应用程序框架为开发者进行服务。

系统C(libc)BSD继承过来的标准的C系统函数库,专门是为基于嵌入式Linux的设备定制的库。

多媒体库:基于PackerVideoOpenCore;该库支持多种常用的音频、视频格式回放和录制,支持多种媒体格式的编和解码格式。

Suface Manager:显示子系统管理器,并且为多个应用程序提供2D3D图层的无缝融合。

LibWebCore:一个最新的Web浏览器引擎,支持Android浏览器,以及一个可嵌入式的Web视图。

SGLSkia图形库,底层的2D图形引擎。

3D libraries:基于OpenGL ES1.0 API的实现;该库可以使用硬件3D加速(如果可用),或者使用高度优化3D软加速。

FreeType:位图(bitmap)和矢量(vector)字体显示。

Android运行环境(ANDROID RUNTIME):提供了Java编程语言核心库的大多数功能,Dalvik Java虚拟机和基础的Java类库组成

DalvikAndroid中使用的Java虚拟机,每个Android应用程序都在自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。

Dalvik被设计成一个可以同时高效运行多个虚拟机实例的虚拟系统。执行后缀名为.dexDalvik可执行文件,该格式的文件

针对小内存使用做出了优化。同时虚拟机是基于寄存器的,所有的类都是有Java编译器编译,然后通过SDK中的“dx”工具

转化为.dex格式由虚拟机执行。

Dalvik虚拟机依赖于Linux内核的一些功能,比如线程机制和底层内存管理机制。


第三层:Android应用框架(ANDROIDFRAMEWORK)

Android系统中,开发人员也可以完全访问核心应用程序所使用的API框架。



第四层:Android应用程序(APPLICATIONS)

注意:Android应用程序都是有Java语言编写的。用户开发的Android应用程序和Android的核心应用程序是同一层次的,它们都是基于Android的系统API构建的。


每一个Android中应用的都是以linux中的进程形式运行,都有唯一的ID号。系统会管理所有的活动栈,生成堆栈。



4大组件详解:

1.Activity活动

呈现用户界面,从Activity基类中继承,一个操作就是一个activity(如列出一个电话表让用户选择上面的人)

2.Service服务

没有用户界面,响应Activity的选择,从Service基类中继承扩展,长时间后台运行,即使Activetiy退出了还能运行。(如音乐播放器在后台播放,就需要用到Service)

3.Broadcast Recevier

接受和响应广播,从BroadcastRecevier基类中继承扩展,应用也可以发出广播。(如下载完后通知其他应用,轮到它们使用网络了,广播过滤器的概念就是帮助应用APP过滤一些无用的广播,在Intent中用到)

4.Content Provider

管理应用数据,将应用的特定数据提供给其他应用。从ContentProvider基类中继承扩展。数据可以放在文件系统,或者数据库,任何地方。(如Android默认有一个Content Provider管理联系人数据库,给其他应用提供数据支持)


生命周期

    Android应用程序不能控制它们自己的进程的生存期;而Android运行时可以管理每一个应用程序的进程,也就是说,它也可以管理进程内的每个活动。

一个 Android 程序的进程是何时被系统结束的呢?通俗地说,一个即将被系统关闭的程序是系统在内存不足(low memory)时,根据“重要性层次”选出来的“牺牲品”。一个进程的重要性是根据其中运行的部件和部件的状态决定的。各种进程按照重要性从高到低排列如 下:
  1. 前台进程。这样的进程拥有一个在屏幕上显示并和用户交互的 activity 或者它的一个IntentReciver 正在运行。这样的程序重要性最高,只有在系统内存非常低,万不得已时才会被结束。
  2. 可见进程。在屏幕上显示,但是不在前台的程序。比如一个前台进程以对话框的形式显示在该进程前面。这样的进程也很重要,它们只有在系统没有足够内存运行所有前台进程时,才会被结束。
  3. 服务进程。这样的进程在后台持续运行,比如后台音乐播放、后台数据上传下载等。这样的进程对用户来说一般很有用,所以只有当系统没有足够内存来维持所有的前台和可见进程时,才会被结束。
  4. 后台进程。这样的程序拥有一个用户不可见的 activity。这样的程序在系统内存不足时,按照 LRU 的顺序被结束。
  5. 空进程。这样的进程不包含任何活动的程序部件。系统可能随时关闭这类进程。


Activity有三种基本状态:

  1. Active:处于屏幕前景(当前task的栈顶Activity处于Active状态),同一时刻只能有一个Activity处于Active状态;
  2. Paused状态:处于背景画面画面状态,失去了焦点,但依然是活动状态;
  3. stopped:不可见,但依然保持所有的状态和内存信息。
[java] view plaincopy
  1. void onCreate(Bundle savedInstanceState)  
  2. void onStart()  
  3. void onRestart()  
  4. void onResume()  
  5. void onPause()  
  6. void onStop()  
  7. void onDestroy()  
这些都是钩子函数,你可以重写他们。所有的activity在首次运行时必须实现onCreate()方法来初始化安装。activity可以实现onPause()来提交数据改变,然后准备停止与用户的交互。  


1、onCreate()     
Acitivity首次创建时被调用。用于设置Acitivity的布局文件,绑定按钮监听器等一些普通静态操作。 

2、onStart() 
Acitivity对用户可见时被调用。 

3、onResume() 
Acitivity获得用户焦点,即用户可操作该Acitivity时被调用。 

4、onPause() 
应用程序启动了其它Acitivity时被调用。一般用于保存当前Acitivity中的数据。 

5、onStop() 
Acitivity不可见时被调用。 

6、onRestart() 
已停止的Acitivity重新启动时被调用。 

7、onDestroy() 
调用Acitivity的finish()方法或Android系统资源不足时被调用。


Activity starts -->onCreate()-->onStart()-->onResume()-->activity is running--another activity comes in front of this activity-->onPause()--the activity is no longer visivble-->onStop()-->onDestroy()-->activity is shut down


意图Intent:

android.content.Intent实例化。描述要执行的操作(如发送邮件),或广播(如摄像头已经被激活),从一个Activity转到另一个Activity的方法。通过向另一个Activity传送两段数据,动作Action和该处理动作所需数据的URL。

通常用的是隐式Intent,显式一般只在应用内部传递消息。

Intent filter过滤器让组件能接收到其所公告的类型的隐式Intent。如果组件没有过滤器则只接受显式Intent。

隐性意图:只表示要干的事,不指明Activity对象。如果存在多个适合的Activity则系统会出现列表让用户选择(如打开网页,出现选择浏览器的提示框)。

显性意图:让另一个Activity干某件事,指明Activity的名称。