【Android源码 栏目提醒】:网学会员,鉴于大家对Android源码 十分关注,论文会员在此为大家搜集整理了“android总结 - 企业软件开发”一文,供大家参考学习!
Android总结
Android发展与历史
Android一词的本义是指“机器人”它是由Andy Rubin创立的一个基于Linux平台的开源手机操作系统后来被Google收购Google希望与各方共同建立一个标准化开放式的移动电话软件平台从而在移动产业内形成一个开放式的操作平台。
Google于2007年11月5日发布了
Android1.0手机操作系统这个版本的
Android系统还没有赢得广泛的市场支持。
从2008年9月22日T-Mobile在纽约正式发布第一款
Android手机——T-Mobile G1开始
Android系统不断地获得各个手机厂商的青睐。
手机操作系统的五大元老SymbianWindowsPalmiPhoneBlackBerry OS
Android平台构造及特性
Android系统的底层建立在Linux系统之上该平台由操作系统、中间件、用户界面和应用软件组成它采用一种被称为软件叠层结构使得层与层之间相互分离明确各层的分工保证了层与层之间的低耦合当下层的层内或层下发生改变时上层应用程序无须任何改变。
Android平台号称是首个为移动终端打造的真正开放和完整的移动软件。
所有的
Android应用程序都运行在虚拟机上程序之间是完全平等的用户可以随意将第三方软件置换掉系统自带的系统软件。
一个程序不但可以通过API访问系统提供的功能还可以声明自身的功能供其他应用程序调用。
同时
Android为开发人员提供了大量的适用库和工具使得开发人员可以快速创建自己的应用程序。
Android应用程序的项目结构 通过
Android SDK可以自动生成一个项目包 src源代码目录该目录存放
Android应用程序所有的源代码该目录项有不同的包包中对应我们开发的源程序。
gen文件夹目录该目录存放Eclipse的ADT插件自动生成的R.java文件。
实际上R.java定义了一个R类它包含了应用中用户界面、图像、字符串等各种资源与之相对应的资源编号id。
这些资源编号都是系统自动生成的即有一个资源对象系统就为此在R类中生成相应的资源编号好比一本字典。
Android应用程序中通过R类别来实现对资源的应用。
同时编译器也会查看这个资源列表没有使用到的资源就不会编译进去为手机应用程序节省空间。
res资源目录该目录下定义了drawable、layout及values3个目录 drawable目录该目录下有drawable-hdpidrawable-ldpi、drawable-mdpi 3个文件夹分别用来存放不同分辨率的图片资源用于手机分辨率的手机的开发开发人员可以通过Resource.getDrawableid获得该资源。
Layout目录该目录下包含了所有使用XML格式的界面技术文件。
主要用于表述应用程序的用户界面布局也用于描述用户界面和接口组件。
一般一个用户界面布局一个XML文件。
Values目录该目录包含了使用XML格式的参数描述文件读者可以在此添加一些额外的资源如字符串String.xml、颜色Color.xml、样式Style.xml和数组Arrays.xml等。
主要通过在代码中通过R类来调用它们而不直接使用这样就可将代码和资源分开管理便于维护。
除了以上文件夹外还有一个AndroidMainfest.xml文件它是系统的控制文件告诉系统如何处理创建的所有顶层组件尤其是Activity、Intent、Service及ContentProvider凡是需要用到的组件都要在此注册。
同时该文件也是所有
Android应用程序都需要的文件其描述了程序包的全局变量包括公开的应用程序组件和每个组件的实现类什么样的数据可以操作在什么地方可以运行等。
在AndroidManifest.xml文件中也可以指定权限、安全控制及测试这些功能在以后的开发中会经常用到。
Android应用程序的系统架构 从软件分层的角度看
Android平台由应用程序、应用程序框架、
Android运行时系统库以及Linux内核构成。
1、应用程序层
Android系统将会包含系列的核心应用程序这些程序包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人等。
这些应用程序都是用Java编写的。
2、
Android应用程序框架 当我们开发
Android应用程序时就是面向底层的应用程序框架进行的。
从这个意义上看
Android系统上的程序是完全平等的不管是
Android系统提供的程序还是普通开发者提供的程序它们都可以访问
Android提供的API框架。
应用程序框架除可作为应用程序开发的基础之外也是软件复用的重要手段任何一个应用程序都可以发布它的功能模块——只要发布时遵守了框架的约定那么其他应用程序也可以使用这个功能模块。
应用程序框架包含了视图系统、活动管理器、通知管理器、内容提供者、窗口管理器、位置管理器、资源管理器、电话管理器和包管理器九大部分。
应用程序框架的各部分具体功能如下所列 活动管理器Activity Manager管理所有的应用程序生命周期以及通常的导航返回栈。
窗口管理器Window Manager管理所有的窗口程序。
内容提供者Content Provider用来让应用程序之间互相存取/分享数据。
例如某个应用程序可以存取联系人应用程序内的联系人数据。
视图系统View Manager用来构建应用程序的基本组件包含了列表、网络、文本框和按钮等。
包管理器Package Manager用来进行
Android系统内的程序管理。
电话管理器Telephone Manager用来管理所有的移动设备的功能。
位置管理器Location Manager用来提供位置服务。
资源管理器Resource Manager提供各种资源让应用程序使用比如本地化字符串、图片、布局文件。
通知管理器Notification Manager使应用程序可以在状态栏应用程序中显示警告信息。
状态栏通常在手机的顶部比如短信、语音邮件提示就会显示在这里。
Android平台的应用程序平等和无界限等特性就是由应用程序框架来保证的。
3、系统库
Android包含一套被不同组件所使用的C/C库的集合。
应用程序框架是贴近应用程序的软件组件服务而更底层则是
Android的函数库这一部分是应用程序框架的支撑。
一般来说
Android应用开发者不能直接调用这套C/C库集但可以通过它上面的应用程序框架来调用这些库。
下面列出一些核心库。
系统C库一个从BSD系统派生出来的标准C系统库libc并且专门为嵌入式Linux设备调整过。
媒体库基于PacketVideo的OpenCORE这套媒体库支持播放和录制许多流行的音频和视频格式以及查看静态图片。
主要包括MPEG4、H.264、MP3、AAC、AMR、JPR、PNG等多媒体格式。
Surface Manager管理对显示子系统的访问并可以对多个应用程序的2D和3D图层机提供无缝整合。
LibWebCore一个全新的Web浏览器引擎该引擎为
Android浏览器提供支持也为WebView提供支持WebView完全可以嵌入开发者自己的应用程序中。
WebKit是一个开源项目许多浏览器也都是用WebKit引擎所开发的如Apple的Safari、Nokia 360手机的浏览器等。
SGL底层的2D图形引擎。
OpenGL ESAndroid是依据OpenGl ES 1.0 API 标准来实现其3D绘图函数库的该函数库可以用软件方式执行也可以用硬件加速方式执行其中在3D软件光栅处理方面进行了高度优化。
3D libraries基于OpenGL ES 1.0 API实习的3D系统这套3D库既可使用硬件3D加速如果硬件系统支持也可使用高度优化的、软件3D加速。
FreeType位图和向量字体显示。
SQLite供所有应用程序使用的、功能强大的轻量级关系数据库。
支持关系数据库的事务等。
SSL媒体框架提供了对各种音频、视频的支持。
Android支持多种音频、视频、静态图像格式。
4、
Android运行时
Android运行时由两部分组成
Android核心库集和Dalvik虚拟机。
其中核心库集提供了Java语言核心库所能使用的绝大部分功能而虚拟机则负责运行
Android应用程序。
核心库包括两大部分一部分由Java所需调用的功能函数组成另一部分由
Android的核心库如
Android.osandroid.netandroid.media等组成。
与传统的Java程序不同的是每一个
Android应用程序都有一个自有的进程每一个
Android应用程序都是用一个自有的Dalvik虚拟机来执行的。
Dalvik虚拟机每个
Android应用程序都运行在单独的一个Dalvik虚拟机内因此Dalvik专门针对同时高效地运行多个虚拟机进行了优化因此
Android系统可以方便地实现对应用程序进行隔离。
Dalvik虚拟机是一种基于寄存器的Java虚拟机大多数虚拟机包括JVM都是基于栈的。
其依靠置换工具dx将Java字节码转换为dex格式称为.dex。
基于寄存器的虚拟机具有更好的性能表现所需资源相对较少而且硬件实现虚拟机也会比较容易但在硬件通用性上略差。
Dalvik虚拟机依赖于Linux内核提供的核心功能如线程和底层内存管理。
5、Linux内核 采用Linux内核则是
Android平台开放性的基础。
Android平台中的操作系统采用了Linux 2.6版的内核它包括了显示驱动、摄像头驱动、Flash内存驱动、BinderIPC驱动、键盘驱动、WIFI驱动、Audio驱动及电源驱动。
Linux内核提供了安全性、内存管理、进程管理、网络协议栈和驱动模型等核心系统服务。
而且Linux内核也是系统硬件和软件叠层之间的抽象层。
软件开发者只需将精力全部投入到上层软件的开发中底层工作都要由Google和手机开发商来完成如驱动的更新、新硬件驱动的编写等。
Android常用开发工具的用法
Android SDK 为开发者提供了可以在电脑上运行的“虚拟手机”
Android把它称为
Android Virtual Device AVD。
Android模拟器就是一台运行在电脑上的“虚拟手机”。
在
Android SDK和AVD管理器中选中指定AVD设备然后单击“Start…”按钮就是启动模拟器来运行
Android系统。
Android提供了一个DDMS调试环境DDMS的全称是Dalvik Debug Monitor Service它是一个功能非常强大的调试环境。
运行如下命令ddms.bat。
Android Debug BridgeADB是一个功能非常强大的工具它位于
Android SDK安装目录的platform-tools子目录下。
ADB工具既可完成模拟器文件与电脑文件的相互复制也可安装APK应用甚至直接切换到
Android系统中执行Linux命令。
当开发
Android应用时该应用中可能会包含许多资源文件包括各种图片、音频文件等当我们需要发布一个APK包时这些资源文件也是必不可少的。
我们可以在创建AVD设备时创建一个虚拟SD卡。
实际上还可以使用mksdcard命令来单独创建一个虚拟存储卡。
应用程序权限说明 一个
Android应用可能需要权限才能调用
Android系统的功能一个
Android应用也可以能被其他应用调用因此它也需要声明调用自身所需要的权限。
1、 声明该应用自身所拥有的权限 通过为ltmanifest…/gt元素添加ltuses-permission…/gt子元素即可为自身声明权限。
例如在ltmanifest…/gt元素里添加如下代码 lt—— 声明该应用本身即有打电话的权限-——gt ltuses-permission
android:name”
android.permission.CALL_PHONE” /gt 2、 声明调用该应用自身所需的权限 通过为应用的各组件元素如ltactivity…/gt元素添加ltuses-permission…/gt子元素即可声明调用该程序所需的权限。
例如在ltactivity…/gt元素里添加如下代码 lt——声明该应用本身即有发送短信的权限——gt ltuses-permission
android:name”
android.permission.SEND_SMS”/gt
Android系统提供了大量的权限位于Manifest.permissioin类中。
其常用的权限如下 ACCESS_NETWORK_STATE允许应用程序获取网络状态信息 ACCESS_WIFI_STATE允许应用程序获取Wi-Fi网络状态信息 BATTERY_STATS 允许应用程序获取电池状态信息的权限 BLUETOOTH 允许应用程序连接匹配的蓝牙设备的权限 BLUETOOTH_ADMIN 允许应用程序发现匹配的蓝牙设备 BROADCAST_SMS 允许应用程序广播收到短信提醒的权限 CALL_PHONE 允许应用程序拨打电话的权限 CAMERA 允许应用程序使用照相机的权限 CHANGE_NETWORK_STATE允许应用程序改变网络连接状态 CHANGE_WIFI_STATE允许应用程序改变Wi-Fi网络连接状态 DELETE_CACHE_FILES 允许应用程序的删除缓存文件权限 DELETE_PACKAGES 允许应用程序删除安装包的权限 FLASHLIGHT 允许应用程序访问闪光灯的权限 INTERNET 允许应用程序打开网络Socket的权限 MODIFY_AUDIO_SETTINGS 允许应用程序修改全局声音设置 PROCESS_OUTGOING_CALLS允许应用程序监听、控制、取消呼出电话的权限 READ_CONTACTS允许应用程序读取用户的联系人数据的权限 READ_HISTORY_BOOKMARKS 允许应用程序读取历史书签 READ_OWNER_DATA 允许应用程序读取用户数据 READ_PHONE_STATE 允许应用程序读取电话状态的权限 READ_PHONE_SMS 允许应用程序读取短信的权限 REBOOT 允许应用程序重启系统的权限 RECEIVE_MMS 允许应用程序接收、监控、处理彩信的权限 RECEIVE_SMS 允许应用程序接收、监控、处理短信的权限 RECORD_AUDIO 允许应用程序录音的权限 SEND_SMS 允许应用程序发送短信的权限 SET_ORIENTATION 允许应用程序旋转屏幕的权限 SET_TIME 允许应用程序设置时间的权限 SET_TIME_ZONE 允许应用程序设置时区的权限 SET_WALLPAPER 允许应用程序设置桌面壁纸的权限 VIBRATE 允许应用程序访问振动器的权限 WRITE_CONTACTS 允许应用程序写入用户联系人的权限 WRITE_HISTORY_BOOKMARKS 允许应用程序写历史书签 WRITE_OWNER_DATA 允许应用程序写用户数据的权限 WRITE_SMS 允许应用程序写短信的权限
Android应用程序的基本组件 1、 Activity 2、 Service 3、 Broadcast Receiver 4、 Content Provider 5、 Intent 简单叙述 Activity——应用表示层基类Activity 应用程序中的每个屏幕都是通过继承和扩展基类Activity来实现 同一个应用中的每个Activity是相互独立的。
程序启动后显示的第一幅画面是应用程序的第一个Activity默认窗口而后可以根据需要从这个Activity启动另一个新的Activity。
Activity状态回调 onCreate onStart onRestart onResume onPause onStop onDestroy Service——没有可见的用户界面但能够长时间运行于后台基类Service 运行于应用程序进行的主线程中因此Service不会阻塞其他组件和用户界面。
Service是不能自己启动的必须通过Context对象如一个Activity调用startService或bindService方法来启动用这两种方法启动的Service的生命周期不同。
调用startService方法 a 若Service没有启动则首先会调用该Service的onCreate方法然后再调用onStart方法。
b 若Service已经启动则会直接调用onStart方法 c 该方法启动的Service可以通过Context对象调用stopService来关闭也可以通过Service自身调用stopSelf或stopSelfResult来关闭关闭之前调用onDestroy方法。
调用bindService方法 该方法使当前Context对象通过一个ServiceConnection的对象绑定到所指定的Service。
a 若Service没有启动则首先会调用该Service的onCreate方法初始化启动然后调用Service的onBind方法初始化绑定。
b 如果绑定Service的Context对象被销毁时被绑定的Service也会调用onUnbind和onDestory方法停止运行 c 注意BroadcastReceiver是不能绑定服务的。
d 一个绑定Service的Context对象还可以通过unbindService来取消对服务的绑定。
e 取消时Service会调用unbind方法若Service是通过bindService来启动的还会调用onDestroy方法来停止服务。
Service状态回调 onCreate onStart onBind onRebind onUnbind onDestroy BroadcastReceiver——用户接收广播通知的组件基类BroadcastReceiver
Android中的广播要么来自于系统要么来自普通应用程序 很多事件都可能导致系统广播如手机所在时区发生变化电池电量低用户改变系统语言设置等。
来自普通应用程序如一个应用程序通知其他应用程序某些数据已经下载完毕。
为了响应不同的事件通知应用程序可以注册不同的Broadcast Receiver。
所有的Broadcast Receiver都继承自基类BroadcastReceiver BroadcastReceiver自身并不实现图形用户界面但是当它收到某个通知后BroadcastReceiver可以启动Activity作为响应或者通过NotificationManager提醒用户。
BroadcastReceiver是对发送出来的Broadcast进行过滤接收并响应的一类组件。
发迸Broadcast信息 1、 把要发送的信息和用于过滤得到信息Action、Category装入一个Intent对象。
2、 调用Context.sendBroadcast、sendOrderBroadcast、sendStickyBroadcast方法广播该Intent对象。
3、 使用sendBroadcast或sendStickyBroadcast方法发出去的Intent所有满足条件的BroadcastReceiver都会随机地执行其onReceive方法 4、 而sendOrderBroadcast发出去的Intent会根据BroadcastReceiver注册时IntentFilter设置的优先级的顺序来执行相同优先级的BroadcastReceiver则是随机执行。
5、 sendStickyBroadcast方法主要的不同是Intent在发送后一直存在并且在以后调用registerReceiver注册相匹配的Intent时会把这个Intent直接返回。
6、 若在使用sendBroadcast方法时指定了接收的权限这只有在AndroidManifest.xml中用ltuses-permissiongt标签声明了拥有此权限的BroadcastReceiver才会有可能接收到发送来Broadcast。
7、 若在注册BroadcastReceiver时指定了可接收的Broadcast的权限则只有在包内的AndroidManifest.xml中用ltuses-permissiongt标签声明了拥有此权限的Context对象所发送的Broadcast才有可能被这个BroadcastReceiver所接收。
接收Broadcast信息 1、 继承BroadcastReceiver类并实现onReceive方法。
2、 注册Broadcast Receiver 有2种方法一种方法是静态地在AndroidManifest.xml中用ltreceivergt标签声明并在标签内用ltintent-filtergt标签设置过滤器另一种方法是动态地在代码中先定义并设置好一个IntentFilter对象然后再需要注册的地方调用Context.registerReceiver方法 取消注册时调用Context.unregisterReceiver方法。
Content Provider——为解决应用程序间数据通信、共享的问题基类ContentProvider 在
Android中每个应用程序都是用自己的用户ID并在自己的进程中运行。
这样的好处是可以有效地保护系统及应用程序避免被其他不正常的应用程序所影响每个进程都拥有独立的进程地址空间和虚拟空间。
Context Provider可以将应用程序特定的数据提供给另一个应用程序使用。
其数据存储方式可以是
Android文件系统、SQLite数据库或者其他合理的方式。
当数据需要在应用程序间共享时我们就可以利用ContentProvider为数据定义一个URI。
之后其他应用程序对数据进行查询或者修改时只需要从当前上下文对象获得一个ContentResolver然后传入响应的URI就可以了。
Content Provider继承自基类ContentProvider并且实现了一组标准接口。
通过这组接口其他应用程序能对数据进行读写和存储。
然而需要使用数据的应用程序并不是直接调用这组方法而是通过调用ContentResolver对象的方法来完成。
ContentResolver对象可以与任意ContentProvider通信。
要为当前应用程序的私有数据定义URI就需要专门定义一个继承自ContentProvider的类然后根据不同的操作调用的方法去实现这些方法的功能。
ContentResolver类为应用程序提供了接入Content机制的方法。
要构造一个ContentResolver对象可以为构造方法ContentResolverContext context传入一个Context对象也可以直接通过Context对象调用getContentResolver方法获得ContentResolver对象后就可以通过调用其query、insert、update等方法来对数据进行操作了。
一旦需要以上4种
Android应用程序基本组件完成请求
Android会首先确认该组件所在进程是否运行如果没有运行
Android将先启动进程同时确认被请求组件的实例是否存在否则将创建一个新的组件实例。
Intent——连接组件的纽带 以上4种基本组件中除了Content Provider是通过Content Resolver激活外其他3种组件Activity、Service和Broadcast Receiver都是由Intent异步消息激活的。
Intent在不同的组件之间传递消息将一个组件的请求意图传给另一个组件。
因此Intent是包含具体请求信息的对象。
针对不同的组件Intent所包含的消息内容有所不同且不同组件的激活方式也不同且不同类.
上一篇:
android实例
下一篇:
兰州市2010年