版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android平台概述
Android:移动智能终端操作系统平台不断进化的移动智能终端功能手机传统意义上的手机,功能较为单一部分可安装和执行应用程序智能手机具有独立的操作系统可安装/卸载第三方软件连接移动网络智能移动终端具有开放式的操作系统,包括了智能手机、平板等设备3智能手机4Nexus4HTCButterfly小米2Samsungi9300iPhone5平板电脑5Nexus10联想乐PadS2010SamsungGalaxyNote10.2iPad3移动智能终端的特点具有开放式的操作系统类似桌面系统中的操作系统,可以安装使用第三方程序具有丰富强大的功能操作系统本身提供的支持第三方程序提供的功能和扩展无线互联网接入能力可通过多种方式接入网络Wifi,3G等6移动智能终端软硬件架构移动智能终端硬件CPU,存储器,屏幕,电源等移动智能终端操作系统平台操作系统及其支撑环境移动智能终端应用面向用户的应用7移动智能终端硬件移动智能终端操作系统平台移动智能终端应用移动智能终端操作系统移动智能终端操作系统移动智能终端启动后的背景程序用户的应用程序是运行于操作系统上的任务操作系统进行资源管理、消息管理、任务调度、异常处理等工作常见的移动智能终端操作系统嵌入式LinuxiOSAndroidWindowsPhone其他操作系统PalmOSWebOSBlackberrySymbianMeego8嵌入式Linux嵌入式Linux对Linux经过裁剪后形成的面向嵌入式系统的操作系统定制化优点Linux的内核小、功能强大、API丰富,系统健壮、效率高,易于定制剪裁,在价格上极具竞争力Linux不仅支持x86CPU,还可以支持其他数十种CPU芯片Linux是开放源码和免费的,具有较好的社区支持主要有RTLinux和uCLinux缺点裁剪的工作量设计与优化9iOS由苹果公司为iPhone开发的操作系统。它主要是给iPhone、iPodtouch以及iPad使用iOS的系统架构分为四个层次:核心操作系统层(theCoreOSlayer)核心服务层(theCoreServiceslayer)媒体层(theMedialayer)可轻触层(theCocoaTouchlayer)iOS的用户界面的概念基础上是能够使用多点触控直接操作。iOS是从于MacOSX核心演变而来,开发工具也是基于Xcode10AndroidAndroid“Android”是“机器人”的意思基于Linux的操作系统用于移动智能终端谷歌的目标是让移动智能终端的应用不依赖于设备甚至平台Andoird的
平台化以Android为纽带将软硬件开发商、设备制造商、电信运营商等结成深层次的合作伙伴关系,在移动产业内形成一个开放式的生态系统全球为数众多的移动电话用户正在使用各种基于Android的移动智能终端11WindowsPhoneWindowsPhone基于微软技术提供的操作系统用于微软旗下的各种嵌入式设备其前身是windowsMobile特点WP智能手机标准硬件功能配置高与XboxLive整合后的游戏优势集成了微软的多种应用OutlookMobileOfficeMobileLiveMessenger手机浏览器等12PalmOSPalmOS原用于PDA主要特点:良好的节能功能。自动进行休眠的调整合理的内存管理。PalmOS占有非常小的内存。数据以数据库的格式存储。数据库由一组记录(records)和一些数据库头信息组成。131996-PalmPilot10002002-handera330胖梨PalmPre奔迈TreoProWebOSWebOSPalm公司开发以Linux内核为主体加上Palm的专有软件特点支持在线社交网络和Web2.0一体化包括一系列的应用程序作个人信息管理及使用各种网络技术,如HTML5、JavaScript及CSS支持触屏14胖梨PalmPre奔迈TreoProBlackberryBlackBerry加拿大公司RIM(ResearchInMotion)产品Blackberry内置一种移动电子邮件系统终端支持推动式电子邮件、移动电话、文字短信、互联网传真、网页浏览及其他无线信息服务BIS(BlackBerryInternetService)即黑莓网络服务,针对于个人用户或不能部署BES服务器的企业开展的邮件推入服务BES(BlackBerryEnterpriseservice)即黑莓企业服务通过BES提供在线的手机办公15SymbianSymbian公司为手机而设计的操作系统,它包含联合的数据库、使用者界面架构和公共工具的参考实现Symbian系统有以下四个版本S60(第一版)S60(第二版)S60(第三版)S60(第五版)S60(第五版)为触摸屏手机版本,如诺基亚5800xm和诺基亚N97Symbian联盟1998年6月,Psion联合诺基亚、爱立信、摩托罗拉等组建了Symbian公司。三星、西门子、松下等公司在后来也相继加入后Nokia收购了该联盟所有股份16Symbian(2)智能手机时代Symbian的主要问题Symbian机型所采用的硬件配置较低,用于功能机较多在多媒体方面,Symbian对主流的媒体格式的支持性较差Symbian支持多种平台,但缺少第三方软件版本之间兼容性差只提供内核及UI,缺少细节Symbian已转向开源17MeegoMeeGo是一个基于Linux的移动操作系统计划于2010年2月的全球移动通信大会中宣布主要的推动者为诺基亚与英特尔,将结合诺基亚的Maemo及英特尔的Moblin由Linux基金会主导MeeGo的目标是运行在多种硬件平台,包括手机、车用资通信娱乐设备、上网本和电视机图形库基于Qt。根据不同的设备,将提供来自英特尔AppUp或诺基亚Ovi数字软件发行系统的应用程序。MeeGo核心操作系统是一个Linux发行版,借鉴诺基亚基于Debian的Maemo和英特尔基于Fedora的Moblin18Android的发展过程Android发展过程2003年10月被称为“Android之父”的AndyRubin创建了Android公司主要进行智能手机软件开发2005年8月Google注资收购该公司包括其所有员工2007年11月Google对外展示Android操作系统2008年9月Google正式发布Android1.020Android发展过程(2)版本升级快半年左右时间就进行一次升级主要版本甜品升级212008年9月Android1.12009年4月Android1.5Cupcake2009年9月Android1.6Donut2009年10月Android2.0/2.0.1/2.1Eclair2010年5月Android2.2/2.2.1Froyo2010年12月Android2.3Gingerbread2011年2月Android3.0Honeycomb2011年5月Android3.1Honeycomb2011年7月Android3.2Honeycomb2011年10月Android4.0IceCream2012年6月Android4.1JellyBean2012年10月Android4.2JellyBean2013?Android5.0KeyLimePieAndroid的主要特点Android的特点Google为Android提供了完整的支持具有较好的扩展性以优化后的Linux为基础系统版本更新快,稳定可靠可以获得Linux社区的支持面向移动智能终端的优化设计对移动多媒体具有良好的支持提供了良好的网络支持23Android的特点(2)具有广泛的技术支持Android社区发展迅速,可获得各个方面的技术支持Android开放开源可方便的进行定制和移植遵循ApacheV2软件许可,有利于商业开发具有完整的产业链硬件厂商软件开发商运营商制造商…24Android的特点(3)面临的问题缺乏有效的应用审核机制,应用数量大但质量参差不齐受到病毒的威胁不同厂商的定制导致版本差异化增加使用模拟器的调试支持不够完善知识产权上仍然存在问题例如部分Android手机需要向微软支付专利费用25开放手机联盟OHA2007年11月由Google宣布成立开放手机联盟(OpenHandsetAlliance)34家创始成员Google,Intel,HTC,CMCC,Ebay,高通,英伟达,TI,Samsung主要目标研发开发移动技术降低移动服务与设备的开发和推广成本开发与推广Android27OHA(2)目前共有84家成员单位成员分类移动运营商半导体公司手机和其他终端制造商软件供应商商业公司28GooglePlayGooglePlayGooglePlay原称为AndroidMarketGoogle于2008年10月正式发布Google为Android(设备)开发的在线应用程序商店2012年3月集成AndroidMarket服务与GoogleMusic、Google图书、GooglePlayMovie,称为GooglePlay/store30GooglePlay(2)Android应用程序的下载可下载免费或者付费的应用应用数量已突破70万个,2013年可能突破100万个31GooglePlay(3)下载次数已突破250亿次32成为Google开发者成为Google开发者来自收费的Android软件的收入开发者能获得30%首先需要完成注册过程,获得开发者账号进入注册页面/apps/publish/v2/signup/?pli=1需要使用gmail账号登录如果没有
需要注册一个账号需要支付$25(使用信用卡)需要等待审核33Android开发环境的搭建Windows下的开发环境JDKEclipseAndroidSDKADT35安装JDK下载JDK/technetwork/java/index.html36安装JDK(2)JDK的三个版本JavaSE(JavaPlatform,StandardEdition)JavaEE(JavaPlatform,EnterpriseEdition)JavaME(JavaPlatform,MicroEdition)37安装JDK(3)从列表中选择合适的版本下载并进行安装38安装JDK(4)安装完成后可通过如下方式进行检查在命令行界面输入”java-version“39安装EclipseEclipse基于Java的开放源代码的可扩展IDE可通过插件来进行开发扩展40版本代号平台版本Callisto3.2Europa3.3Ganymede3.4Galileo3.5Helios3.6Indigo3.7Juno3.8及4.2Kepler(预定)4.3安装Eclipse(2)下载地址/41安装Eclipse(3)或者通过Google直接搜索Eclipse42安装Eclipse(4)Eclipse官网上提供了专门的下载页面/downloads/43安装Eclipse(5)可以直接下载”EclipseforJavaDevelopers”44安装Eclipse(6)选择适合操作系统的版本下载45安装Eclipse(7)Eclipse不需要安裝在安装完JDK后可以直接使用EclipseEclipse第一次运行后设置工作目录之后可以用于开发46安装AndroidSDK首先需要下载与安装AndroidSDK/sdk/index.html47安装AndroidSDK(2)正式下载之前需要签署协议48安装AndroidSDK(3)adt-bundle-windows-x86.zip包括了Eclipse和SDK49安装AndroidSDK(4)打开其中的”SDKManager.exe”选择需要的SDK版本进行安装50安装AndroidSDK(5)在线安装打开Eclipse51安装AndroidSDK(6)Eclipse中提供了AndroidSDK在线安装、更新的方式52安装AndroidSDK(7)进行在线的安装和更新53安装AndroidSDK(8)在线进行安装和更新需要较高的网络带宽54安装ADT在线安装Eclipse中的help->InstallNewSoftware55安装ADT(2)选择下载的ADT包进行安装“Add…”->“Location”->输入网址/android/eclipse/56安装ADT(4)离线安装ADT下载ADT包/sdk/installing/installing-adt.html离线安装是在在线安装无法进行的情况下进行或者如果在线安装需要较长的时间57安装ADT(5)Eclipse中的help->InstallNewSoftware58安装ADT(6)选择下载的ADT包进行安装“Add…”“Archive”选择ADT包59安装ADT(7)可以看到安装的细节60Stepbystep直到结束”Finish”61模拟器AVDAndroid虚拟设备(AndroidVirtualDevice)每个AVD模拟一套虚拟设备运行Android平台62模拟器(2)模拟器的作用调试和测试应用程序Dalvik虚拟机的实现可进行不同的硬件配置提供了网络连接模拟器的局限不支持呼叫和接听实际来电不支持USB连接不支持照相机/视频采集不支持扩展耳机不能确定连接状态不能确定电池电量水平和交流充电状态不能确定SD卡的插入/弹出不支持蓝牙63模拟器(3)通过AVDManager管理模拟器64模拟器(4)创建新的模拟器根据开发情况填写
各项参数65模拟器(5)启动模拟器模拟器的尺寸可以调整66模拟器(6)模拟器的启动过程可能比较慢,需要等待67Android体系结构Android系统架构69Android分层结构Android系统使用了软件栈(SoftwareStack)来构建Android分层结构从上到下依次为应用程序层应用程序框架层核心类库Linux内核70应用程序层Android应用程序层集成了核心应用程序,包括email客户端SMS短消息程序Google日历Google地图浏览器联系人管理程序上述程序在Android系统发布时作为核心程序打包发布Android应用程序由Java语言编写71应用程序框架层该层为开发者提供API框架提供了用来创建Android程序的类简化Android组件的重用方式通过该层的软件规范,可以进行功能的扩展可以在规定的安全限制之下进行程序之间的共享72应用程序框架层(2)核心的应用程序服务活动管理器(ActivityManager)管理应用程序生命周期及Activity栈视图(Views)用来创建程序的用户界面,包括列表、网格、文本框等通知管理器(NotificationManager)用来在状态栏显示应用程序给用户的通知内容管理器(ContentProviders)使得应用程序之间可以进行数据共享资源管理器(ResourceManager)提供对字符串和图像等非代码资源的访问73核心类库Android包含了C/C++库被Android系统中不同的组件所使用通过应用程序框架为开发者提供服务74库(Libraries)库(Libraries)系统C库继承自BSD的标准C系统函数库为基于Linux的嵌入式系统进行了定制和优化75库(Libraries)(2)媒体库基于PacketVideoOpenCore,第三方库支持多种常用音视频编解码Mpeg4,H.264,MP3等支持静态图像文件JPG,PNG等SurfaceManager管理显示子系统为多个应用程序提供2D和3D图层无缝融合LibWebCoreWeb浏览器引擎用来支持Android浏览器和可嵌入的Web视图76库(Libraries)(3)SGL2D图形引擎的核心库SQLite轻量级关系数据库引擎所有程序可用FreeType用来支持位图和矢量字体渲染SSL用来支持安全套接字层(SSL)加密协议的安全Internet通信3DLibrariesOpenGL的嵌入式版本OpenGLES可使用硬件3D加速或者软件3D加速77运行时(Run-time)AndroidRun-Time包括两个部分核心库Dalvik虚拟机核心库提供JAVA编程语言核心库的大多数功能Dalvik虚拟机Google为Android设计的Java虚拟机78运行时(Run-time)(2)Dalvik虚拟机Android程序运行于Dalvik虚拟机之上设计与Java虚拟机不同Dalvik虚拟机运行的是Dex专有文件格式,JVM运行Java字节码Dalvik是基于寄存器进行设计,JVM是基于栈Android程序与虚拟机的关系每个Android程序都有自己的进程,拥有一个独立的Dalvik虚拟机实例Dalvik虚拟机被设计成为一个设备,可以高效的同时运行多个虚拟系统Android程序通过编译后还需要通过dx工具转换为.dex文件Dalvik虚拟机执行.dex文件79运行时(Run-time)(3)Dalvik虚拟机的特征专有文件格式.dex通过dex将应用中所定义的许多类生成的class文件整合到一个文件中,减少了冗余信息,文件大小和I/O操作数量,提高类的查找速度增加对新操作码的支持文件结构简洁,使用等长指令,执行效率高扩大了只读结构大小,利于程序间数据共享针对.dex的优化针对小内存进行了优化基于寄存器提高了代码执行效率,代价是在硬件和通用性上的降低应用/进程/虚拟机的对应实现进程之间的隔离,保护程序安全Dalvik虚拟机依赖操作系统底层线程调度和管理,内存分配和管理,互斥等80Linux内核Android的操作系统核心Android4.0之前的Linux内核是基于Linux2.6Android4.0、4.1和4.2是基于Linux3.0但不是完全的Linux,不包含全部的Linux系统初始化和编程接口和标准的Linux系统是有所不同的Android的操作系统核心服务可以看做是硬件层和系统(软件)上层的抽象层安全性,内存管理,进程管理,网络协议栈,电源管理和驱动81Linux内核(2)显示驱动(DisplayDriver)基于Linux的帧缓冲(FrameBuffer)驱动照相机驱动(CameraDriver)基于Linux的VideoforLinux驱动蓝牙驱动(BluetoothDriver)基于蓝牙(IEEE802.15.1标准)的无线传输技术Flash存储驱动(FlashMemoryDriver)基于MTD的Flash驱动程序BinderIPC驱动Android的特殊驱动程序,具有单独的设备节点,提供进程间通信的功能82Linux内核(3)USB驱动(USBDriver)为移动智能终端的USB接口提供驱动键盘驱动(KeyBoardDriver)作为输入设备的键盘驱动WiFi驱动基于IEEE802.11标准的驱动程序音频驱动(AudioDriver)基于ALSA(AdvancedLinuxSoundArchitecture)的高级Linux声音体系驱动PowerManagement(电源管理)电池电量等83Android进程与线程进程和线程进程具有独立功能的程序在操作系统中的运行活动资源分配和调度的独立单位线程进程中的独立实体CPU进行调度的基本单位不拥有系统资源,拥有运行使用资源进程与线程的映射一对一一对多多对多85Android进程Android的基础操作系统在Android的操作系统层是Linux使用Linux进程Android进程系统会为Andorid程序分配Linux用户ID每个进程会有相应的权限,实现进程之间的安全用户进程的创建如应用程序组件是第一次启动且无其他组件运行,Android系统为应用程序创建单线程的Linux进程默认同一应用程序的所有组件运行在同一个进程和线程里称为main主线程如进程已存在,则组件运行在已有进程或线程中;或者创建额外的线程中;或者指定组件运行在其他进程中86Android进程(2)Android进程的控制在manifest文件中来设置组件所在的进程组件可以运行在自己所在程序的进程中或者与某些组件共享进程进程的终止当内存不足或活动进程需要内存时,Android系统会根据内存使用情况终止其他进程被终止进程会在需要时重新启动87Android进程(3)Android进程的生命周期Android系统尽可能维持进程在内存中的存在移动智能终端的内存受限,在必要时系统会终止旧进程来提供内存空间根据进程的重要性来选择哪些进程会被先终止重要性小的先被终止Android进程的重要性等级划分前台进程可见进程服务进程后台进程空进程88Android进程(4)前台进程正在执行的程序的进程,包括进程的一个activity正在与用户交互进程拥有一个绑定在正在与用户交互的activity上的service进程拥有一个前台运行的Service进程拥有一个正在执行生命周期中onCreate(),onStart()或onDestory()方法的Service进程拥有一个正在执行onReceive()方法的BroadcastReceiver前台进程通常不多当内存太小以至于不能容纳所有的可能前台进程时,一些前台进程就会被终止89Android进程(5)可见进程不拥有运行于前台的组件,包括拥有不在前台但可见的activity前台activity启动对话框时服务进程进程拥有绑定到可见activity的Service进程运行了被startService()启动的Service后台进程进程拥有不可见的activity空进程进程,不拥有任何active的组件90Android进程(6)Android根据进程中当前active组件的重要性,来安排其进程级别例如,如果一个进程拥有一个service和一个可见的activity,进程会被定为可见进程,而不是服务进程。被其它进程所依赖的进程,其级别可能会被提高拥有service的进程比拥有后台activity的进程级别高当一个activity启动一个需长时间执行的操作时,启动Service比创建一个线程效率高使用service能保证操作至少有“service进程”的优先级91Android进程(7)进程间通讯使用远程过程调用(remoteprocedurecall,RPC)提供的进程间通信(IPC)机制被activity或其他应用程序组件调用的方法将(在其他进程中)被远程执行,而所有的结果将被返回给调用者要求把方法调用及其数据分解到操作系统可以理解的程度,并将其从本地的进程和地址空间传输至远程的进程和地址空间,然后在远程进程中重新组装并执行这个调用。执行后的返回值将被反向传输回来Android提供了执行IPC事务所需的全部代码需要关注定义和实现RPC编程接口上即可92Android线程AndroidUI线程应用程序启动时,系统为之创建“main”主线程,有时也称为UI线程负责将事件分发给相应用户界面的widget负责应用程序与AndroidUI组件包之间的交互不是每个组件的实例都拥有单独的线程UI线程中实例化同一个进程中的所有组件UI线程分发对每个组件的系统调用对系统回调进行响应的方法总是运行在UI线程AndroidUI线程的要点不要让UI线程做每一件事情UI线程的阻塞超过一定时间(大约5s),会引起ANR“应用程序没有响应”对话框单线程模式下不要阻塞UI线程,也不要在UI线程之外访问UI组件包93Android线程(2)工作线程为保证程序的响应能力,创建单独的线程来完成耗时的操作注意:工作线程不能访问UI组件包否则可能导致不明确、不可预见的后果,并且难以跟踪需确保工作线程完成工作,UI线程进行UI操作通过使用不同的方法可以达到代码复杂程度增加了为确保代码不会变的特别复杂并且难以维护,对于复杂操作可以采用异步任务来完成异步任务允许以异步方式来操作用户界面异步任务首先阻塞工作线程,然后在UI线程中进行结果的显示不需要人工干预94AndroidSDKAndroidSDKAndroidSDK提供开发Android应用程序所使用的开发组件Windows/Linux/Mac平台上均有对应SDK包含了Android平台上的工具集以Java语言为基础AndroidSDK提供的主要功能访问摄像头和GPS等硬件自带的Google地图和LBS服务后台服务SQLite数据库数据共享和应用程序通信图形支持优化的内存和进程管理…96AndroidSDK(2)AndroidSDK所支持的操作系统:WindowsXP(32-bit)orVista(32-or64-bit)orWin7MacOSX10.4.8orlater(x86only)Linux97AndroidSDK目录在安装AndroidSDK的android-sdk-windows目录中98AndroidSDK目录(2)add-ons保存附加库例如GoogleMapsDocsAndroidSDKAPI参考文档可以对API进行查阅Extras扩展插件提供向下兼容的功能99AndroidSDK目录(3)Platforms每个平台的SDK真正的文件根据APILevel划分的SDK版本最新的android-17文件夹,进入后是Android4.2SDK的主要文件data保存着一些系统资源skins是Android模拟器的皮肤templates是工程创建的默认模板android.jar是该版本的主要framework文件较早版本还包括了ant为ant编译脚本images是模拟器映像文件tools目录里面包含了重要的编译工具,比如aapt、aidl、逆向调试工具dexdump和编译脚本dx100AndroidSDK目录(4)platform-tools保存着一些通用工具比如adb、和aapt、aidl、dx等文件,Android123提示这里和platforms目录中tools文件夹有些重复(主要指较低版本)从android2.3开始这些工具被划分为通用主要工具adb工具:AndroidDebugBridge,通用调试工具,可以管理设备、手机模拟器的状态aapt工具:AndroidAssetPackagingTool,可以查看,创建,更新ZIP格式的文档附件(zip,jar,apk),也可将资源文件编译成二进制文件aidl工具:AndroidInterfaceDefinitionLanguage,即Android接口描述语言dx工具:AndroidSDK的编译器。当运行Java文件,dx.exe将创建一个带有.dex后缀—Dalvik可执行格式的文件101AndroidSDK目录(5)SamplesAndroidSDK自带的默认示例工程包括了较为全面的Android程序设计内容system-images针对不同处理器的systemimagesTools包含了重要的工具ddms用于启动Android调试工具屏幕截图和文件管理器draw9patch是绘制android平台的可缩放png图片的工具sqlite3可以在PC上操作SQLite数据库Monkeyrunner是压力测试应用,模拟用户随机按键mksdcard是模拟器SD映像的创建工具emulator是android模拟器主程序traceview作为android平台上重要的调试工具102AndroidSDK目录(6)android.jar标准压缩包包含了编译后的class文件包含了全部的API103AndroidSDK目录(7)学习Android开发需要了解AndroidSDK通过SDK帮助文档104AndroidSDK目录(8)SDK文档的阅读需要循序渐进了解Android了解其开发工具链了解环境搭建熟悉API并进行练习105AndroidSDK目录(9)通过SDK文档来深入了解Android开发SDK文档中提供了相应的支持106AndroidSDK目录(10)根据需要来进行了解107AndroidSDK提供的实例AndroidSDK的Samples提供了丰富的实例108AndroidSDK提供的实例(2)SkeletonApp演示如何使用AndroidSDK提供的视图组件如EditText、Button、ImageView和菜单等ApiDemos演示了许多AndroidAPI,包括了app、content、graphic和media等通过该示例来了解AndroidAPINotePad记事本程序演示了文本的新建、编辑和删除等操作LunarLander演示了一个登陆月球的小游戏主要涉及到动画、键盘快捷键、线程的实现等109AndroidSDK提供的实例(3)Home演示主题类软件,实现一套新的主题界面并注册到系统主题当中如何开发主题类应用SoftKeyBoard演示软键盘与输入框事件的绑定,自动显示软键盘如何使用软键盘Snake贪吃蛇自定义视图组件的实现和控制,游戏的设计开发JetBoy具备声音支持的游戏实例演示多媒体支持下的游戏设计开发110Android核心开发包android.util包含一些底层辅助类,例如特定的容器类,XML辅助工具类等android.os提供基本的操作服务,消息传递和进程间通信IPCandroid.grpics作为核心渲染包,提供图形渲染功能android.text/android.text.method/android.text.style/android.text.util提供一套丰富的文本处理工具,支持富文本,输入模式111Android核心开发包(2)android.database包含底层API处理数据库,方便操作数据库表和数据android.content提供各种服务访问数据在手机设备上,程序安装到手机设备和其他相关资源,以及内容提供展示动态数据android.view核心用户界面框架android.widget提供标准用户界面元素,lists(列表),buttons(按钮),layoutmanagers(布局管理器)等,是组成我们界面的基本元素112Android核心开发包(3)android.app提供高层应用程序模型,实现使用Activityvider提供方便调用系统提供的contentproviders的接口android.telepony提供API交互和手机设备的通话接口android.webikit包含一系列工作在基于Web内容的API113Android基本组件Android基本组件Android应用程序由以下部分构成ActivityBroadcastReceiverServiceContentProviderIntent/IntentFilter不是每个程序都需要上述所有组件对上述组件进行组合来进行应用程序的编写通过AndroidManifest.xml来实现具体的组件组合115Activity最基本的Android模块之一提供使用者一个交互式的接口功能可以看做是应用中的一个单独屏幕每个Activity被实现为一个继承于Activity基类的单独的类Android应用程序中的Activity一般Android应用程序中都有多个ActivityActivity之间互相跳转例如通过button116Activity(2)Activity的管理所有的Activity在系统中的Activity栈中管理新的Activity执行后被放置到栈的顶部,状态转变为runningActivity先前的Activity仍然在栈中,但不在前台Activity生命周期Active/runningPausedStopFinish/kill117ServiceService服务运行在后台的一段代码长期存活,运行在自己的进程或者其他程序的的上下文中取决于自身的需要运行时不具有UI编码与其他组件的关系其他组件可以绑定到一个Service通过远程调用RPC来调用118Service(2)Service的生命周期通过其他应用程序组件启动、终止和控制包括其他service、activity和broadcastreceiver适合于需要定期或者持续执行不与用户交互的操作启动的Service具有比非active状态的Activity更高的优先级防止被意外的终止当Service占用了必需资源时,会被终止;在资源可用时,Service会被自动重启应用程序可以作为服务需要定时更新,但用户交互少119Intent/IntentFilterIntent意图一种消息传递机制,定义为对要进行的操作的抽象描述与特定的数据一起声明执行某个动作的意图可以进行屏幕之间的切换,描述了应用程序想要做什么Intent的构成动作或者说需要进行的动作动作对应的数据120Intent/IntentFilter(2)Intent在Android应用程序中的作用启动Activity启动特定的Activity启动未指明的Activity处理Activity的返回值支持Android系统中任意两个应用程序组件之间的交互在系统范围内广播消息任何应用程序都可以注册广播接收器来监听和响应广播的Intent,从而能够事件来创建事件驱动的应用程序广播公布系统事件Intent启动Activity的方式显示:通过指定要加载的类隐式:通过请求对一组数据执行某个动作121Intent/IntentFilter(3)IntentFilter用来注册Activity、Service和BroadcastReceiver并对一个动作或一类特定数据进行处理告诉Android系统如何找到合适的处理程序IntentFilter的使用方法使用标签及其属性来指定一个组件所支持的动作、分类和数据可以使用IntentFilter作为插件和扩展Android系统对IntentFilter进行解析隐式的Intent被解析为一个单一的活动如果有多个活动可以完成对指定数据的动作,那么启动最合适的活动122BroadcastReceiverIntent广播(Broadcast)事件Intent可以用作不同进程间传递数据和事件的媒介由应用程序或者Android系统本身来广播一些事件的到来监听(通过注册BroadcastReceiver)并可以获取Intent中的数据BroadcastReceiverBroadcastIntentReceiver要接收和处理广播Intent(来自应用程序或系统),必须注册BroadcastReceiver同时需要设置一个IntentFilter来指定监听的对象即监听哪些Intent123BroadcastReceiver(2)BroadcastReceiver的使用继承BroadcastReceiver类,重写方法注册和注销BroadcastReceiverBroadcastReceiver的注册在AndroidManifest.xml或者使用特定的方法来进行注册限制使用BroadcastReceiver的IntentFilter来匹配广播Intent时,处理程序必须在5s内完成主要的处理任务不使用BroadcastReceiver处理124ContentProviderContentProvider内容提供器在不同应用程序之间共享数据,通过一组标准的方法来存取其中的数据抽象出了底层的数据源,将应用程序层和数据层分开ContentProvider的权限具有完全的控制权限可以使用URI模型来进行访问支持读取和写入125ContentProvider(2)访问ContentProvider通过ContentResolver(内容解析器)来进行处理每个应用程序的上下文都有一个单独的ContentResolverContentResolver中包含了操作和查询内容提供器的方法相关方法与数据库的查询相似包括了query,insert,update和delete等不同方法使用具体确定的URI来访问文件可以对本地的内容提供器进行使用Brower,CallLog,Contacts,MediaStore,Settings126Activity简介Android核心组件:ActivityActivity活动Andorid组件中最基本也是最为常见用的组件在Android应用中,一个Activiy通常就是一个单独的屏幕每个Activity都被实现为一个从活动基类继承来的独立的类活动类显示的用户接口由视图控件组成,并对事件做出响应Activity是Android应用程序的表示层使用View来构成显示信息和响应用户动作的UI可以看做是开发环境中的Form应用程序越复杂,需要的屏幕可能越多128Activity的创建与使用Activity的创建和使用创建Activity在Activity类的基础上进行扩展在Activity中定义UI并实现其功能基本Activity类提供了封装了窗口显示处理功能的空白屏幕交互和显示还需要进行设计Activity的注册应用程序中的Activity需要在AndroidManifest.xml中进行注册没有对应标签的Activity不能被启动130Activity的创建和使用(2)在android.app.Activity类中,Android定义了一系列方法在应用程序中通过对这些方法的复写来完成对Activity的创建和使用publicclassOurActivityextendsActivity{ protectedvoidonCreate(BundlesavedInstanceState); protectedvoidonStart(); protectedvoidonReStart(); protectedvoidonResume(); protectedvoidonPause(); protectedvoidonStop(); protectedvoidonDestroy(); }131Activity的创建和使用(3)protectedvoidonCreate(BundlesavedInstanceState)一个Activity的实例被启动时调用的第一个方法一般都会覆盖该方法作为应用程序的一个入口点完成一些初始化数据、设置用户界面等工作大多数情况下,在该方法中从xml中加载设计好的用户界面。例如setContentView(R.layout.main);也可从savedInstanceState中读取保存到存储设备中的数据需要判断savedInstanceState是否为null,因为Activity第一次启动时并没有数据被存贮在设备中
if(savedInstanceState!=null){ savedInstanceState.get("Key"); }132Activity的创建和使用(4)protectedvoidonStart()在onCreate()方法之后被调用,或者在Activity从Stop状态转换为Active状态时被调用ProtectedvoidonReStart()在Activity被停止后调用protectedvoidonResume()在Activity从Pause状态转换到Active状态时被调用133Activity的创建和使用(5)protectedvoidonPause()在Activity从Active状态转换到Pause状态时被调用必要时也需要保存状态和数据protectedvoidonStop()在Activity从Active状态转换到Stop状态时被调用一般在这里保存Activity的状态信息protectedvoidonDestroy()在Activity被结束时调用,它是被结束时调用的最后一个方法一般完成释放资源,清理内存等工作134HelloWorld!Java文件----应用程序源文件android本身相当一部分都是用java编写而成android的应用使用java来开发Class文件----Java编译后的目标文件Google使用Dalvik来运行应用程序Android的class文件是编译过程中的中间目标文件,需要链接成dex文件才能在Dalvik上运行135HelloWorld!(2)Dex文件----Android平台上的可执行文件Android虚拟机Dalvik支持的字节码文件格式Apk文件----Android上的安装文件Apk是Android安装包的扩展名,一个Android安装包包含了与该Android应用程序相关的所有文件apk文件将AndroidManifest.xml文件、应用程序代码(.dex文件)、资源文件和其他文件打成一个压缩包一个工程只能打进一个.apk文件apk文件的本质是一个zip包136HelloWorld!(3)Eclipse自动生成newandroidprojectHelloAndroid137HelloWorld!(4)代码:HelloWorld.java138packagecom.myapps.helloworld;importandroid.os.Bundle;importandroid.app.Activity;importandroid.view.Menu;publicclassHelloWorldextendsActivity{@Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_hello_world);}@Override publicbooleanonCreateOptionsMenu(Menumenu){ //Inflatethemenu;thisaddsitemstotheactionbar ifitispresent. getMenuInflater().inflate(R.menu.hello_world,menu); returntrue; }}HelloWorld!(5)一个Activity就是一个类这个类要继承于Activity重写onCreate方法publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_hello_world); }139HelloWorld!(6)R.java140/*AUTO-GENERATEDFILE.DONOTMODIFY.*/packagecom.myapps.helloworld;publicfinalclassR{publicstaticfinalclassattr{}publicstaticfinalclassdimen{publicstaticfinalintactivity_horizontal_margin=0x7f040000;publicstaticfinalintactivity_vertical_margin=0x7f040001;}publicstaticfinalclassdrawable{publicstaticfinalintic_launcher=0x7f020000;}publicstaticfinalclassid{publicstaticfinalintaction_settings=0x7f080000;}publicstaticfinalclasslayout{publicstaticfinalintactivity_hello_world=0x7f030000;}publicstaticfinalclassmenu{publicstaticfinalinthello_world=0x7f070000;}publicstaticfinalclassstring{publicstaticfinalintaction_settings=0x7f050001;publicstaticfinalintapp_name=0x7f050000;publicstaticfinalinthello_world=0x7f050002;}publicstaticfinalclassstyle{publicstaticfinalintAppTheme=0x7f060001;}}HelloWorld!(7)activity_hello_world.xml141<RelativeLayoutxmlns:android="/apk/res/android"xmlns:tools=“/tools” android:layout_width="match_parent“ android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".HelloWorld"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world"/></RelativeLayout>ResourcesHelloWorld!(8)每一个Activity都需要在AndroidMainfest.xml中文件当中进行配置<activity android:name="com.myapps.helloworld.HelloWorld“ android:label="@string/app_name"> <intent-filter> <actionandroid:name="ent.action.MAIN"/> <categoryandroid:name="ent.category.LAUNCHER"/> </intent-filter> </activity>为Activity添加必要的控件通过findViewById(控件的id);可以得到所要显示的控件例如取得TextView的控件 TextViewtextView=(TextView)findViewById(R.id.Test);142HelloWorld!(9)布局文件中的属性很多通过布局文件来定义重要的属性android:layout_width宽度android:layout_height高度match_parent|wrap_contentandroid:layout_weight:权重(默认为0)android:id唯一标识,用于在程序或配置文件中引用143HelloWorld!(10)strings.xml144<?xmlversion="1.0"encoding="utf-8"?><resources><stringname="app_name">HelloWorld</string><stringname="action_settings">Settings</string><stringname="hello_world">Helloworld!</string></resources>将要显示内容:HelloWorld.HelloWorld!(11)RUN145RUNHelloWorld!(12)146HelloWorld!(13)147HelloWorld!(14)Activity是Android应用程序的用户接口一个Activity中可以放置很多控件Activity也可以理解为控件的容器148按钮列表文本HelloWorld!(15)模拟器屏幕最大支持1280*80010.1”Tablet,WXGA7.3”Nexus7最小支持240*3202.7”QVGA149HelloWorld!(16)命令行运行启动模拟器emulator-avd2.3–scaleauto150HelloWorld!(17)命令行运行连接模拟器telnetlocalhost5554151HelloWorld!(18)命令行运行拨打电话:gsmcall13911110086152HelloWorld!(19)命令行运行发送短信:smssenelloWorld153Android程序结构/srcJava源代码存放目录/gen自动生成目录存放所有由Android开发工具自动生成的文件154Android程序结构(2)/gen/R.javaR.java文件由Android开发工具自动产生的Android开发工具会自动根据放入res目录的xml界面文件、图标与常量,同步更新修改R.java文件R.java文件是由开发工具自动生成的,应避免手工修改R.javaR.java在应用中起到了字典的作用,它包含了界面、图标、常量等各种资源的id通过R.java,应用可以很方便地找到对应资源另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间155Android程序结构(3)/res资源(Resource)目录存放应用使用到的各种资源,如xml界面文件,图片或数据156Android程序结构(4)res目录下的资源文件除string之外,还可以定义color,dimensstring-array(子标记为item)每种资源都需要定义name属性资源文件放在res/values目录下可以是单独的文件可以分类放在不同文件中文件名任意资源目录中不能随意创建子目录布局资源的文件名和图片资源的文件名只允许小写字母和数字157Android程序结构(5)res/xml目录其他资源任意XML文件,程序中用R.xml.文件名访问res/raw目录原始资源程序中用Resources对象.openRawResource(R.raw.XXX)获得一个输入流原始资源不会被编译为二进制asset放入assets目录,系统不会自动生成id,程序中用Resources对象.getAssets().open(文件名)获得输入流assets目录则可以随意创建子目录158Android程序结构(6)对资源的引用程序中利用R.资源类型.资源名访问例如R.layout.mainR.id.abc或者使用getResources()得到Resources对象,用于将资源的id值转为相应的对象例如getText,getColor,getDrawableXML文件中利用@资源类型/资源名访问例如@id/abc@+id/abc表示添加一个id资源“abc”159Android程序结构(7)AndroidManifest.xml列出了应用程序所提供的功能可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity包括了安全访问权限perties项目环境信息,一般是不需要修改此文件160Activity的生命周期Activity的生命周期Android应用程序不能控制所拥有进程的生存期Android系统在运行时管理每个应用程序的进程同样业管理每个进程内的每个活动Activity的管理所有的Activity由Android系统的Activity栈管理当前所有正在运行的进程的后进先出的集合Activity的状态由它在栈中的位置所决定一个新的Activity执行后被放置到栈的顶端,变成“runningactivity”,此前的Activity存在于堆栈中,一般不在前景如果通过“Back”返回此前的Activity或者当前Activity被关闭,栈中的下一个活动变成栈顶活动,并成为活动状态162Activity的生命周期(2)Activity的状态Activity在系统中不断的被创建和销毁在Activity栈中被移进和移出Activity在不同的状态中转换Activity的4个状态活动状态(Active)暂停状态(Paused)停止状态(Stop)非活动状态(Finish/Kill)163Activity的生命周期(3)Activity:活动状态位于Activity栈的栈顶可见的、focused的前台Activity处于屏幕的最上层Android系统会尽力维持活动状态Activity的运行通过适当的销毁其他的Activity来保证活动状态Activity所需的资源当有某个Activity变为活动状态时,该活动被暂停处于paused状态164Activity的生命周期(4)Activity:暂停状态特定情况下可见但不是焦点的Activity非全屏或者半透明状态仍处于近似active的状态自身的状态和数据都存在与窗口管理程序保持联系不能接收用户的输入事件被系统终止当系统内存资源不足时会被终止状态的转变不可见时转变为停止状态165Activity的生命周期(5)Activity:停止状态当一个Activity被其它的Activity完全的遮盖住时,Activity的状态发生变化仍保有其状态及数据已变为不可见,画面是隐藏且不需要更新停止状态的Activity会被终止当系统内存不足时,stop状态的Activity首先被终止已释放内存状态的转换Activity退出或者被关闭166Activity的生命周期(6)Activity的终止不受程序员控制可以通过程序创建和运行Activity,并使用方法停止Activity终止Activity由Android系统决定当Activity处于pause或者stop状态时可能被系统终止并回收应用程序运行过程中的一些状态(用户输入等)需要保存到持久存储中应用程序中启动了其他后台线程,同样也需要进行处理否则会失去运行时的状态或输入或者由于没有处理后台线程导致异常167Activity的生命周期(7)Activity状态的转换除栈顶Activity外均为pause/stop/finish/kill状态一旦栈顶Activity失去焦点就变为pause/stop/finish/kill状态,同时新的Activity或者栈中的下一个Activity成为栈顶Activity转换的控制状态的转换由系统控制,对用户不可见转换过程中所存储的数据和状态在Activity转换为active状态时就需要进行恢复168Activity的生命周期(8)169完整生命周期可视生命周期前台生命周期Activity的生命周期(9)完整生命周期Activity的完整生命周期自第一次调用onCreate()方法开始,到调用onDestroy()为止如果Activity所在的进程被终止,那么即使没有调用onDestroy方法Activity也结束其存在在onCreate()中设置所有“全局”状态以完成初始化初始化Activity扩展(inflate)UI分配对类变量的引用将数据绑定到控件创建服务和线程在onDestroy()中释放所有系统资源通过重写来清除,保证所有外部资源被关闭170Activity的生命周期(10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年大型医院建设施工合同范本包工不包料
- 2024年度婚姻财产鉴定合同
- 2024工程项目借款合同
- 2024工地防水材料买卖合同书
- 2024年度基于BIM的建筑物流管理服务合同
- 合同履约的会计分录-记账实操
- 2024年商标许可使用权合同
- 全民节约用水倡议书范文(6篇)
- 2024年度建筑施工质量安全合同
- 2024年城市轨道建设特许经营协议
- 静疗护士进修汇报
- 2023年唐山银行招聘考试真题
- 《小学低年级语文说话能力培养的研究》课题实施方案
- 大型机械运输服务方案
- 2024年公司工会工作计划模版(三篇)
- 9.1增强安全意识课件-2024-2025学年统编版道德与法治七年级上册
- 榆能集团笔试考什么
- 应用英语智慧树知到答案2024年陕西交通职业技术学院
- 光伏组件回收再利用建设项目可行性研究报告写作模板-拿地申报
- 一例下肢静脉血栓疑难病例护理讨论1
- 水电站可行性研究阶段勘探工作施工组织设计
评论
0/150
提交评论