Android架构分析
一、安卓架构图直观
Android系统架构由五部分组成,Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。以下这张图展示了Android系统的主要组成部分:
1、Linux Kernel
Android基于Linux2.6提供核心的系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。
如果你只是做应用开发,就不需要深入了解Linux Kernel层。
2、Android Rundtime
Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序时Dalvik虚拟机中的实例,运行在它们自己的进程中。Dalvik虚拟机设计成,在一个设备可以高效运行地多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,.dex格式是专门为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。两种架构各有优势,一般而言,基于栈的机器需要更多指令,而基于寄存器的机器指令更大。dx是一套工具,可以将Java .class转换为.dex格式。一个dex文件通常会有多个.class,由于dex有时必须进行最佳化,会使文件大小增加1-4倍,以ODEX结尾。
Dalvik虚拟机依赖于Linux提供基本功能,如线程和底层内存管理。
3、Application Framework
通过提供开放的开发平台,Android使开发者能够编制很丰富的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等。
(1)Activity Manager — 活动管理器
管理应用程序生命周期,提供通用的导航回退功能。
(2)Window Manager
(3)内容提供者—Content Providers
使所有应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据。
(4)View System — 视图
丰富的、可扩展的视图集合,可用于构建一个应用程序,包括列表、网格、文本框、按钮。甚至是内嵌的网页浏览器。
(5)Package Manager
(6)Telephony Manager
主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机的SIM卡的状态和信息,电信网络的状态以及手机用户的信息。
获取:
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
(7)Resource Manager — 资源管理器
提供访问非代码资源,如本地化字符串、图形和布局文件。
(8)Notification Manager — 通知管理器
使所有的应用程序能够在状态栏显示自定义警告。
(9)Location Manager
4、Applications
Android装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java编程语言写的。
二、详解Application Framework
1、Window Manager [ import android.view.WindowManager ]
WindowManager是Android中一个重要的Service,是全局且唯一的。WindowManager是继承ViewManager的。
WindowManager主要用来管理窗口的一些状态、属性、view增加、删除、更新、窗口顺序、消息收集和处理等。Android中真正展示给用户的是window和view,activity所起的作用主要是处理一些逻辑问题,比如生命周期管理以及建立窗口。
WindowManager中还有一个重要的静态类LayoutParams。通过它可以设置和获得当前窗口的一些属性。
两个常见应用:
(1)实现悬浮窗口
(2)获取Display中屏幕高宽
(3)改变Dialog背景透明
2、PackageManager
作用:获取Android系统中应用程序的信息,主要包括packageName, label, icon, 占用大小等。具体包括:
1)安装、卸载应用查询permission相关信息;
2)查询Application相关信息(application, activity, receiver, service, provider及相关属性等)
3)查询已安装应用;
4)增加、删除permission;
5)清除用户数据、缓存、代码段等。
几个常见应用:
(1)获取已安装的应用程序的信息
(2)获取系统中所有满足ACTION_MAIN和CATEGORY_LAUNCHER的应用程序的包名、程序入口Activity名
3、Notification Manager
NotificationManager:该类负责状态栏通知的管理,负责发通知、清楚通知等。
Notification:是具体的状态栏通知对象,可以设置icon、文字、提示声音、震动等参数。
通知需要的基本参数:
1)通知的图标
2)通知的标题和内容
3)点击通知执行页面跳转 ( PendingIntent )
可选参数:
状态栏顶部提示消息、提示音、振动、灯光等
(1)使用系统定义的通知
(2)使用自定义的通知