对于Android来说,所有的应用程序都是平等的,第三方和原生安卓程序使用相同的API并执行在相同的运行时中,即使是拨号和主界面,用户都可以删除,替代任何原生程序而使用第三方的程序代替,

Android Software Stack

一个Linux内核和一个C/C++ libraries的集合通过application framework暴露出去

Linux内核:包括硬件驱动,进程,内存管理,安全,网络,电源管理,是LINUX2.6内核。

Libraries:运行在内核之上,包含了多种核心libraries如libc和SSL,以及:

  • 媒体lib用于播放音频视频
  • 外观管理器,提供显示管理
  • 视频lib,包括SGL,OPENGL,提供2D,3D的图形处理接口
  • SQLite,提供本地数据库支持
  • SSL和WEBKIT.
Android运行时 Android手机和普通Linux移动实现最大的不同,就是安卓运行时,包括核心libraries和Dalvik虚拟机 核心libraries: 提供大多数core java类库的功能以及安卓专有的类库功能。(JAVA接口) Dalvik虚拟机: 基于寄存器的虚拟机,为单设备有效运行多实例进行了优化,其实现基于Linux内核对于县城和底 层内存的管理。

Application framework, 提供创建安卓程序的类。提供一个底层硬件的基本抽象‘ Application layer, 应用程序的层面。
Dalvik虚拟机 如果对运行速度和效率有更高的要求,可以直接使用C/C++,Android提供了NDK(native development kit)来满足这一要求。
Dalvik提供了硬件和软件层中的中间层,缓冲了具体实现和软件抽象之间的矛盾。DALVIK上执行DALVIK可执行文件,该文件被优化以节约内存。通过JAVA语言编写的源代码被编译成class文件后,再被工具转换为.dex可执行文件。
安卓程序框架 安卓鼓励组建重用,使用户可以和其他程序一起发布,共享公用的Activities,服务和数据,而这一切仍然处于安全规则的限制之下。
安卓框架包括以下组件:
  • Activity Manager, 控制activities的生命周期
  • Views, 用于建立程序的UI
  • Notification Manager, 提供通知功能
  • Content Providers 提供数据共享功能
  • Resource Manager 支持非代码的资源文件。
在ADT中运行Android程序实际上执行以下操作:
  1. 将当前项目编译并转换成Android可执行代码.dex
  2. 将可执行文件和资源文件打包成一个Android package(.apk)
  3. 启动选择的虚拟设备(如果该虚拟设备还未启动)
  4. 将程序安装到目标设备中
  5. 启动程序
理解HelloWorld程序 Activity是整个应用程序完成视觉,交互组件的基础类 Views是android中的视觉组建 资源文件存放于目录结构下的res目录,包括drawable, layout,和values子文件夹。 android的UI布局使用XML描述,这样一来,逻辑和视图就实现了解耦 为了让代码能够访问到显示组件,在XML文件的组件定义中添加ID属性,这样在代码中可以使用findViewById返回一个定义的组建的引用。
大多数应用程序都可以归类为以下几类:
  • Foreground 只有当其界面位于最前时才起作用的应用程序,比如游戏
  • Background 包含有限的交互功能,在大多数时间隐藏。比如电话界面和SMS自动回复
  • Intermittent 包含交互但是大多数工作在后台处理。比如音乐播放器
  • Widget 在主页进行显示用
Foreground应用程序 创建这类应用程序时,需要仔细考虑Activity生命周期,这样Activity能够在前端和后端平滑的切换 应用程序对于生命周期只有有限的控制权, 一个没有运行服务的后台应用程序是Android资源管理器的主要清理对象。因此,在这种情况下,如果一个应用程序不再处于前段时,需要保存好其状态
Background服务和Intent接收者 这类应用程序很少接收用户输入,常常无声的运行在后台,它们常常监听来自于硬件,系统和其他应用程序的信息和动作。
Intermittent应用程序 这类应用程序以对用户输入进行处理,但在处于非活动状态时又有一定用途。比如Chat和email。
基于硬件的设计考量 有效率,使用更少空间,面向小屏幕的设计,更差的网络连接(模拟器可以模拟网络延迟和速度)

Android通过Activity管理器和Window管理器来保证对用户行为的响应,通过以下两个条件来决定响应性:

  1. 一个应用程序必须对任何用户行为,比如一个按键或者一个屏幕触摸在5秒钟内进行反应
  2. 一个广播接收者需要在10秒内从onReceive方法中返回。
造成失去响应的主要原因主要有网络查找,复杂计算(如游戏中的移动),文件IO。
Android开发工具集
  • Android SDK和Virtual Device Manager
  • Android Emulator
  • Dalvik Debug Monitoring Service(DDMS) 监视和控制Dalvik虚拟机
  • Android Asset Packagin Tool(AAPT) 生成Android程序分发包
  • Android Debug Bridge(ADB) 一个C/S结构的应用程序,提供了连接运行时模拟器的连接,允许拷贝文件,安装编译的APK,运行脚本命令
  • SQLite3 访问SQLite的数据库工具
  • Traceview Android程序的图形化日志查看工具
  • MkSDCard 创建一个可以用于模拟器的SD卡镜像
  • Dx 将Java的class文件转换为.dex字节码
  • activityCreator 可以生成ant脚本用来在ADT插件外编译android程序
  • layoutOpt 分析优化layout资源,提出改进建议

更多相关文章

  1. Android判断程序是否第一次运行
  2. Android Eclipse JNI 调用 .so文件加载问题
  3. Android之Layout资源文件
  4. Android实战技巧:使用原始资源文件
  5. 在任意位置获取应用程序Context

随机推荐

  1. Android4.0中修改挂断键(ENDCALL)的默认行
  2. Android/Java仿微信按时间长短分类显示时
  3. Android带参数链接请求服务器
  4. android 源码的一些修改定制方案
  5. 禁止状态栏下拉
  6. Android intent 传递数组对象序列化
  7. Android监听Dialog点击外部区域
  8. ffmpeg compile with neon support for a
  9. android 背光控制 HAL层分析
  10. android sdk不fq更新方案