Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。Android SDK 提供了在Android 平台上使用Java 语言进行Android 应用开发必须的工具和API 接口。

Android系统构架

Linux内核

Android 依赖Linux 内核2.6 提供核心服务,比如安全、内存管理、进程管理、网络、硬件驱动。在这里,Linux内核扮演的是硬件层和系统其它层次之间的一个抽象层的概念。这个操作系统并非类GNU/Linux 的,因为其系统库,系统初始化和编程接口都和标准的Linux 系统是有所不同的,就是把linux内受GNU协议约束的部分做了取代,这样在Android的程序可以用于商业目的。

核心库

核心库包括,SurfaceManager 显示系统管理库,负责把2D或3D内容显示到屏幕;Media Framework 媒体库,负责支持图像,支持多种视频和音频的录制和回放;SQlite 数据库,一个功能强大的轻量级嵌入式关系数据库;WebKit 浏览器引擎等。
Dalvik虚拟机:区别于Java虚拟机的是,每一个Android 应用程序都在它自己的进程中运行,都有一个属于自己的Dalvik 虚拟机,这一点可以让系统在运行时可以达到优化,程序间的影响大大降低。Dalvik虚拟机并非运行Java字节码,而是运行自己的字节码。

应用程序框架

  • 丰富而又可扩展性的视图(Views),可以用来构建应用程序,它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),可嵌入的web 浏览器。
  • 内容提供者(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。
  • 资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件(layoutfiles)。
  • 通知管理器(Notification Manager)使得应用程序可以在状态栏中显示自定义的提示信息。
  • 活动管理器(Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能。

应用程序

Android 系统会内置一些应用程序包包括email 客户端,SMS 短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA 语言编写的。

应用程序组件

Activity(活动)

活动是最基本的Android 应用程序组件,应用程序中,一个活动通常就是一个单独的屏幕。每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并对事件做出响应。大多数的应用是由多个屏幕显示组成。当一个新的屏幕打开后,前一个屏幕将会暂停,并保存在历史堆栈中。用户可以返回到历史堆栈中的前一个屏幕。当屏幕不再使用时,还可以从历史堆栈中删除。默认情况下,Android 将会保留从主屏幕到每一个应用的运行屏幕。

BroadcastReceiver(广播接收器)

在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。应用程序可以拥有任意数量的广播接收器以对所有它感兴趣的通知信息予以响应。所有的接收器均继承自BroadcastReceiver基类。广播接收器没有用户界面。然而,它们可以启动一个activity来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

Service(服务)

Service 是一段长生命周期的,没有用户界面的程序。比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service 运行结束。另外,我们还可以通过使用Context.bindService()方法,连接到一个service 上(如果这个service 还没有运行将启动它)。当连接到一个service 之后,我们还可以service 提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。

Content Provider(内容提供器)

Android 应用程序能够将它们的数据保存到文件、SQLite 数据库中,甚至是任何有效的设备中。当你想将你的应用数据与其它的应用共享时,内容提供器就可以发挥作用了。因为内容提供器类实现了一组标准的方法,从而能够让其它的应用保存或读取此内容提供器处理的各种数据类型。
数据是应用的核心。在Android 中,默认使用鼎鼎大名的SQLite 作为系统DB。但是在Android 中,使用方法有点小小的不一样。在Android 中每一个应用都运行在各自的进程中,当你的应用需要访问其他应用的数据时,也就需要数据在不同的虚拟机之间传递,这样的情况操作起来可能有些困难(正常情况下,你不能读取其他的应用的db 文件),ContentProvider 正是用来解决在不同的应用包之间共享数据的工具。

Content Resolver(内容解析器)

ContentResoler是通过一个Uri来找到相应的ContentProvider的来进行实际操作。

Intent(异步消息激活)

Activity、Service和BroadcastReceiver都是由Intent的异步消息激活的。Intent在不同的组件之间传递消息,将一个组件的请求意图传给另一个组件。因此,Intent是个包含具体请求信息的对象。针对不同的组件,Intent所包含的消息内容有所不同,且不同组件的激活方式也不同。

Android的虚拟机Dalvik

Dalvik和标准Java虚拟机(JVM)首要差别
Dalvik 基于寄存器,而JVM 基于栈。,基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。


Dalvik和Java运行环境的区别
Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭.

Android的相关文件类型

Java文件-----应用程序源文件
android 本身相当一部分都是用java 编写而成(基本上架构图里头蓝色的部份都是用Java 开发的),android 的应用必须使用java 来开发。


Class文件------Java编译后的目标文件
不像J2se,java 编译成class 就可以直接运行,android 平台上class 文件不能直接在android 上运行。由于Google使用了自己的Dalvik 来运行应用,所以这里的class 也肯定不能在AndroidDalvik 的java 环境中运行,android的class 文件实际上只是编译过程中的中间目标文件,需要链接成dex 文件后才能在dalvik 上运行。


Dex文件-----Android平台上的可执行文件
Android 虚拟机Dalvik 支持的字节码文件格式Google 在新发布的Android 平台上使用了自己的Dalvik 虚拟机来定义,这种虚拟机执行的并非Java 字节码,而是另一种字节码:dex 格式的字节码。在编译Java 代码之后,通过Android 平台上的工具可以将Java 字节码转换成Dex 字节码。虽然Google 称Dalvik 是为了移动设备定做的,但是业界很多人认为这是为了规避向sun 申请Javalicense。这个DalvikVM 针对手机程式/CPU 做过最佳化,可以同时执行许多VM 而不会占用太多Resource。


Apk文件-------Android上的安装文件
Apk 是Android 安装包的扩展名,一个Android 安装包包含了与某个Android 应用程序相关的所有文件。apk文件将AndroidManifest.xml 文件、应用程序代码(.dex 文件)、资源文件和其他文件打成一个压缩包。一个工程只能打进一个.apk 文件。

Activity生命周期

  • 当一个Activity 在屏幕的最上层时(对堆栈的最顶端),它就是属于active 或者running 的状态。
  • 如果一个Activity 失去焦点(focus)但还看得到它的画面(比如:一个新的Activity 画面并不是全屏幕或者它是一个半透明的情况),那失去焦点的Activity 则处在paused 的状态。像这个失去焦点的Activity它还是完全活着的,并没有消失。(活着的意思是指,Activity 自己本身所有的状态及数据都还是存在的,也跟窗口管理程序window manager 保持联系着),像这种paused 的Activity,会在一种情况下消失,那就是当系统的内存不够用之时,系统会自动判断,八部重要的Activity 移除。
  • 如果一个Activity 被其它的Activity 完全的遮盖住时,它仍然保有全部的状态及数据,但因为它已不再被使用者看见,所以它的画面是被隐藏起来的(画面不需要更新),当系统内存不足时,这种stop 状态的Activity 时最先被系统考虑拿下来释放内存的。
  • 当一个Activity 处于pause 或stop 的状态时,系统可以要求Activity 结束(finish)或直接移除(kill)它。当它需要再度呈现在使用者面前时,它必须要能完整的重新启动及回复先前的状态。

onCreate()
在activity第一次被创建的时候调用。这里是你做所有初始化设置的地方──创建视图、绑定数据至列表等。如果曾经有状态记录,则调用此方法时会传入一个包含着此activity以前状态的包对象做为参数。

onRestart()
在activity停止后,在再次启动之前被调用。

onStart()
当activity正要变得为用户所见时被调用。

onResume()
在activity开始与用户进行交互之前被调用。此时activity位于堆栈顶部,并接受用户输入。

onPause()
当系统将要启动另一个activity时调用。此方法主要用来将未保存的变化进行持久化,停止类似动画这样耗费CPU的动作等。这一切动作应该在短时间内完成,因为下一个activity必须等到此方法返回后才会继续。

onStop()
当activity不再为用户可见时调用此方法。这可能发生在它被销毁或者另一个activity(可能是现存的或者是新的)回到运行状态并覆盖了它。

onDestroy()
在activity销毁前调用。这是activity接收的最后一个调用。这可能发生在activity结束(调用了它的 finish() 方法)或者因为系统需要空间所以临时的销毁了此acitivity的实例时。你可以用isFinishing() 方法来区分这两种情况。

更多相关文章

  1. Android设置颜色的几种方法
  2. Android系统框架
  3. android基础知识15:获得android系统信息01—info类
  4. Android设置颜色的几种方法
  5. C#开发Android手机应用全接触(mono for android)
  6. android中的Selector的用法---主要是改变ListView和Button控件的
  7. android makefile prebuild
  8. :如何安装apk文件在Android仿真器中
  9. Android(安卓)layout文件中 '?' 的作用

随机推荐

  1. 了解PHP中self关键字的相关知识
  2. 使用PHP求最大奇约数的和
  3. PHP代码优化的53个细节和优化策略
  4. 浅谈PHP面向对象的继承
  5. 谈谈关于PHP内存溢出的思考
  6. PHP实现根据出生年月日计算年龄的功能(代
  7. php之var_dump(1...9)会输出什么?
  8. php中的include,require,include_once,requi
  9. 分析一下PHP中的Trait机制原理与用法
  10. 谈谈PHP中require和include的区别