《密西西比河谷州立大学:Android应用程序开发》(1)


《密西西比河谷州立大学:Android应用程序开发》(一) .

   第一层: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的设备定制的库。

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

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

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

  SGL:Skia图形库,底层的2D图形引擎。

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

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

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

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

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

   针对小内存使用做出了优化。同时虚拟机是基于寄存器的,所有的类都是有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 plaincopyprint

  1. void onCreate(Bundle savedInstanceState) 
  2. void onStart() 
  3. void onRestart() 
  4. void onResume() 
  5. void onPause() 
  6. void onStop() 
  7. void onDestroy() 

  void onCreate(Bundle savedInstanceState) void onStart() void onRestart() void onResume() void onPause() void onStop() 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的名称。

移动开发 Android 程序开发

S.ingle 11 years ago

Your Answer