Android程序設(shè)計(jì)課件_第1頁(yè)
Android程序設(shè)計(jì)課件_第2頁(yè)
Android程序設(shè)計(jì)課件_第3頁(yè)
Android程序設(shè)計(jì)課件_第4頁(yè)
Android程序設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩529頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Android平臺(tái)概述

Android:移動(dòng)智能終端操作系統(tǒng)平臺(tái)不斷進(jìn)化的移動(dòng)智能終端功能手機(jī)傳統(tǒng)意義上的手機(jī),功能較為單一部分可安裝和執(zhí)行應(yīng)用程式智能手機(jī)具有獨(dú)立的操作系統(tǒng)可安裝/卸載第三方軟體連接移動(dòng)網(wǎng)路智能移動(dòng)終端具有開(kāi)放式的操作系統(tǒng),包括了智能手機(jī)、平板等設(shè)備3智能手機(jī)4Nexus4HTCButterfly小米2Samsungi9300iPhone5平板電腦5Nexus10聯(lián)想樂(lè)PadS2010SamsungGalaxyNote10.2iPad3移動(dòng)智能終端的特點(diǎn)具有開(kāi)放式的操作系統(tǒng)類(lèi)似桌面系統(tǒng)中的操作系統(tǒng),可以安裝使用第三方程式具有豐富強(qiáng)大的功能操作系統(tǒng)本身提供的支持第三方程式提供的功能和擴(kuò)展無(wú)線互聯(lián)網(wǎng)接入能力可通過(guò)多種方式接入網(wǎng)絡(luò)Wifi,3G等6移動(dòng)智能終端軟硬體架構(gòu)移動(dòng)智能終端硬體CPU,記憶體,螢?zāi)唬娫吹纫苿?dòng)智能終端操作系統(tǒng)平臺(tái)操作系統(tǒng)及其支撐環(huán)境移動(dòng)智能終端應(yīng)用面向用戶(hù)的應(yīng)用7移動(dòng)智能終端硬體移動(dòng)智能終端操作系統(tǒng)平臺(tái)移動(dòng)智能終端應(yīng)用移動(dòng)智能終端操作系統(tǒng)移動(dòng)智能終端操作系統(tǒng)移動(dòng)智能終端啟動(dòng)後的背景程式用戶(hù)的應(yīng)用程式是運(yùn)行於操作系統(tǒng)上的任務(wù)操作系統(tǒng)進(jìn)行資源管理、消息管理、任務(wù)調(diào)度、異常處理等工作常見(jiàn)的移動(dòng)智能終端操作系統(tǒng)嵌入式LinuxiOSAndroidWindowsPhone其他操作系統(tǒng)PalmOSWebOSBlackberrySymbianMeego8嵌入式Linux嵌入式Linux對(duì)Linux經(jīng)過(guò)裁剪後形成的面向嵌入式系統(tǒng)的操作系統(tǒng)定制化優(yōu)點(diǎn)Linux的內(nèi)核小、功能強(qiáng)大、API豐富,系統(tǒng)健壯、效率高,易於定制剪裁,在價(jià)格上極具競(jìng)爭(zhēng)力Linux不僅支持x86CPU,還可以支持其他數(shù)十種CPU晶片Linux是開(kāi)放源碼和免費(fèi)的,具有較好的社區(qū)支持主要有RTLinux和uCLinux缺點(diǎn)裁剪的工作量設(shè)計(jì)與優(yōu)化9iOS由蘋(píng)果公司為iPhone開(kāi)發(fā)的操作系統(tǒng)。它主要是給iPhone、iPodtouch以及iPad使用iOS的系統(tǒng)架構(gòu)分為四個(gè)層次:核心操作系統(tǒng)層(theCoreOSlayer)核心服務(wù)層(theCoreServiceslayer)媒體層(theMedialayer)可輕觸層(theCocoaTouchlayer)iOS的用戶(hù)介面的概念基礎(chǔ)上是能夠使用多點(diǎn)觸控直接操作。iOS是從於MacOSX核心演變而來(lái),開(kāi)發(fā)工具也是基於Xcode10AndroidAndroid“Android”是“機(jī)器人”的意思基於Linux的操作系統(tǒng)用於移動(dòng)智能終端穀歌的目標(biāo)是讓移動(dòng)智能終端的應(yīng)用不依賴(lài)於設(shè)備甚至平臺(tái)Andoird的

平臺(tái)化以Android為紐帶將軟硬體開(kāi)發(fā)商、設(shè)備製造商、電信運(yùn)營(yíng)商等結(jié)成深層次的合作夥伴關(guān)係,在移動(dòng)產(chǎn)業(yè)內(nèi)形成一個(gè)開(kāi)放式的生態(tài)系統(tǒng)全球?yàn)閿?shù)眾多的移動(dòng)電話用戶(hù)正在使用各種基於Android的移動(dòng)智能終端11WindowsPhoneWindowsPhone基於微軟技術(shù)提供的操作系統(tǒng)用於微軟旗下的各種嵌入式設(shè)備其前身是windowsMobile特點(diǎn)WP智能手機(jī)標(biāo)準(zhǔn)硬體功能配置高與XboxLive整合後的遊戲優(yōu)勢(shì)集成了微軟的多種應(yīng)用OutlookMobileOfficeMobileLiveMessenger手機(jī)流覽器等12PalmOSPalmOS原用於PDA主要特點(diǎn):良好的節(jié)能功能。自動(dòng)進(jìn)行休眠的調(diào)整合理的記憶體管理。PalmOS佔(zhàn)有非常小的記憶體。數(shù)據(jù)以資料庫(kù)的格式存儲(chǔ)。資料庫(kù)由一組記錄(records)和一些資料庫(kù)頭資訊組成。131996-PalmPilot10002002-handera330胖梨PalmPre奔邁TreoProWebOSWebOSPalm公司開(kāi)發(fā)以Linux內(nèi)核為主體加上Palm的專(zhuān)有軟體特點(diǎn)支持線上社交網(wǎng)路和Web2.0一體化包括一系列的應(yīng)用程式作個(gè)人資訊管理及使用各種網(wǎng)路技術(shù),如HTML5、JavaScript及CSS支持觸屏14胖梨PalmPre奔邁TreoProBlackberryBlackBerry加拿大公司RIM(ResearchInMotion)產(chǎn)品Blackberry內(nèi)置一種移動(dòng)電子郵件系統(tǒng)終端支持推動(dòng)式電子郵件、移動(dòng)電話、文字短信、互聯(lián)網(wǎng)傳真、網(wǎng)頁(yè)流覽及其他無(wú)線資訊服務(wù)BIS(BlackBerryInternetService)即黑莓網(wǎng)路服務(wù),針對(duì)於個(gè)人用戶(hù)或不能部署B(yǎng)ES伺服器的企業(yè)開(kāi)展的郵件推入服務(wù)BES(BlackBerryEnterpriseservice)即黑莓企業(yè)服務(wù)通過(guò)BES提供線上的手機(jī)辦公15SymbianSymbian公司為手機(jī)而設(shè)計(jì)的操作系統(tǒng),它包含聯(lián)合的資料庫(kù)、使用者介面架構(gòu)和公共工具的參考實(shí)現(xiàn)Symbian系統(tǒng)有以下四個(gè)版本S60(第一版)S60(第二版)S60(第三版)S60(第五版)S60(第五版)為觸摸屏手機(jī)版本,如諾基亞5800xm和諾基亞N97Symbian聯(lián)盟1998年6月,Psion聯(lián)合諾基亞、愛(ài)立信、摩托羅拉等組建了Symbian公司。三星、西門(mén)子、松下等公司在後來(lái)也相繼加入後Nokia收購(gòu)了該聯(lián)盟所有股份16Symbian(2)智能手機(jī)時(shí)代Symbian的主要問(wèn)題Symbian機(jī)型所採(cǎi)用的硬體配置較低,用於功能機(jī)較多在多媒體方面,Symbian對(duì)主流的媒體格式的支持性較差Symbian支持多種平臺(tái),但缺少第三方軟體版本之間相容性差只提供內(nèi)核及UI,缺少細(xì)節(jié)Symbian已轉(zhuǎn)向開(kāi)源17MeegoMeeGo是一個(gè)基於Linux的移動(dòng)操作系統(tǒng)計(jì)畫(huà)於2010年2月的全球移動(dòng)通信大會(huì)中宣佈主要的推動(dòng)者為諾基亞與英特爾,將結(jié)合諾基亞的Maemo及英特爾的Moblin由Linux基金會(huì)主導(dǎo)MeeGo的目標(biāo)是運(yùn)行在多種硬體平臺(tái),包括手機(jī)、車(chē)用資通信娛樂(lè)設(shè)備、上網(wǎng)本和電視機(jī)圖形庫(kù)基於Qt。根據(jù)不同的設(shè)備,將提供來(lái)自英特爾AppUp或諾基亞Ovi數(shù)字軟體發(fā)行系統(tǒng)的應(yīng)用程式。MeeGo核心操作系統(tǒng)是一個(gè)Linux發(fā)行版,借鑒諾基亞基於Debian的Maemo和英特爾基於Fedora的Moblin18Android的發(fā)展過(guò)程Android發(fā)展過(guò)程2003年10月被稱(chēng)為“Android之父”的AndyRubin創(chuàng)建了Android公司主要進(jìn)行智能手機(jī)軟體開(kāi)發(fā)2005年8月Google注資收購(gòu)該公司包括其所有員工2007年11月Google對(duì)外展示Android操作系統(tǒng)2008年9月Google正式發(fā)佈Android1.020Android發(fā)展過(guò)程(2)版本升級(jí)快半年左右時(shí)間就進(jìn)行一次升級(jí)主要版本甜品升級(jí)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的主要特點(diǎn)Android的特點(diǎn)Google為Android提供了完整的支持具有較好的擴(kuò)展性以?xún)?yōu)化後的Linux為基礎(chǔ)系統(tǒng)版本更新快,穩(wěn)定可靠可以獲得Linux社區(qū)的支持面向移動(dòng)智能終端的優(yōu)化設(shè)計(jì)對(duì)移動(dòng)多媒體具有良好的支持提供了良好的網(wǎng)路支持23Android的特點(diǎn)(2)具有廣泛的技術(shù)支持Android社區(qū)發(fā)展迅速,可獲得各個(gè)方面的技術(shù)支持Android開(kāi)放開(kāi)源可方便的進(jìn)行定制和移植遵循ApacheV2軟體許可,有利於商業(yè)開(kāi)發(fā)具有完整的產(chǎn)業(yè)鏈硬體廠商軟體開(kāi)發(fā)商運(yùn)營(yíng)商製造商…24Android的特點(diǎn)(3)面臨的問(wèn)題缺乏有效的應(yīng)用審核機(jī)制,應(yīng)用數(shù)量大但品質(zhì)參差不齊受到病毒的威脅不同廠商的定制導(dǎo)致版本差異化增加使用模擬器的調(diào)試支持不夠完善知識(shí)產(chǎn)權(quán)上仍然存在問(wèn)題例如部分Android手機(jī)需要向微軟支付專(zhuān)利費(fèi)用25開(kāi)放手機(jī)聯(lián)盟OHA2007年11月由Google宣佈成立開(kāi)放手機(jī)聯(lián)盟(OpenHandsetAlliance)34家創(chuàng)始成員Google,Intel,HTC,CMCC,Ebay,高通,英偉達(dá),TI,Samsung主要目標(biāo)研發(fā)開(kāi)發(fā)移動(dòng)技術(shù)降低移動(dòng)服務(wù)與設(shè)備的開(kāi)發(fā)和推廣成本開(kāi)發(fā)與推廣Android27OHA(2)目前共有84家成員單位成員分類(lèi)移動(dòng)運(yùn)營(yíng)商半導(dǎo)體公司手機(jī)和其他終端製造商軟體供應(yīng)商商業(yè)公司28GooglePlayGooglePlayGooglePlay原稱(chēng)為AndroidMarketGoogle於2008年10月正式發(fā)佈Google為Android(設(shè)備)開(kāi)發(fā)的線上應(yīng)用程式商店2012年3月集成AndroidMarket服務(wù)與GoogleMusic、Google圖書(shū)、GooglePlayMovie,稱(chēng)為GooglePlay/store30GooglePlay(2)Android應(yīng)用程式的下載可下載免費(fèi)或者付費(fèi)的應(yīng)用應(yīng)用數(shù)量已突破70萬(wàn)個(gè),2013年可能突破100萬(wàn)個(gè)31GooglePlay(3)下載次數(shù)已突破250億次32成為Google開(kāi)發(fā)者成為Google開(kāi)發(fā)者來(lái)自收費(fèi)的Android軟體的收入開(kāi)發(fā)者能獲得30%首先需要完成註冊(cè)過(guò)程,獲得開(kāi)發(fā)者帳號(hào)進(jìn)入註冊(cè)頁(yè)面/apps/publish/v2/signup/?pli=1需要使用gmail帳號(hào)登錄如果沒(méi)有

需要註冊(cè)一個(gè)帳號(hào)需要支付$25(使用信用卡)需要等待審核33Android開(kāi)發(fā)環(huán)境的搭建Windows下的開(kāi)發(fā)環(huán)境JDKEclipseAndroidSDKADT35安裝JDK下載JDK/technetwork/java/index.html36安裝JDK(2)JDK的三個(gè)版本JavaSE(JavaPlatform,StandardEdition)JavaEE(JavaPlatform,EnterpriseEdition)JavaME(JavaPlatform,MicroEdition)37安裝JDK(3)從列表中選擇合適的版本下載並進(jìn)行安裝38安裝JDK(4)安裝完成後可通過(guò)如下方式進(jìn)行檢查在命令行介面輸入”java-version“39安裝EclipseEclipse基於Java的開(kāi)放源代碼的可擴(kuò)展IDE可通過(guò)插件來(lái)進(jìn)行開(kāi)發(fā)擴(kuò)展40版本代號(hào)平臺(tái)版本Callisto3.2Europa3.3Ganymede3.4Galileo3.5Helios3.6Indigo3.7Juno3.8及4.2Kepler(預(yù)定)4.3安裝Eclipse(2)下載地址/41安裝Eclipse(3)或者通過(guò)Google直接搜索Eclipse42安裝Eclipse(4)Eclipse官網(wǎng)上提供了專(zhuān)門(mén)的下載頁(yè)面/downloads/43安裝Eclipse(5)可以直接下載”EclipseforJavaDevelopers”44安裝Eclipse(6)選擇適合操作系統(tǒng)的版本下載45安裝Eclipse(7)Eclipse不需要安裝在安裝完JDK後可以直接使用EclipseEclipse第一次運(yùn)行後設(shè)置工作目錄之後可以用於開(kāi)發(fā)46安裝AndroidSDK首先需要下載與安裝AndroidSDK/sdk/index.html47安裝AndroidSDK(2)正式下載之前需要簽署協(xié)議48安裝AndroidSDK(3)adt-bundle-windows-x86.zip包括了Eclipse和SDK49安裝AndroidSDK(4)打開(kāi)其中的”SDKManager.exe”選擇需要的SDK版本進(jìn)行安裝50安裝AndroidSDK(5)線上安裝打開(kāi)Eclipse51安裝AndroidSDK(6)Eclipse中提供了AndroidSDK線上安裝、更新的方式52安裝AndroidSDK(7)進(jìn)行線上的安裝和更新53安裝AndroidSDK(8)線上進(jìn)行安裝和更新需要較高的網(wǎng)路帶寬54安裝ADT線上安裝Eclipse中的help->InstallNewSoftware55安裝ADT(2)選擇下載的ADT包進(jìn)行安裝“Add…”->“Location”->輸入網(wǎng)址/android/eclipse/56安裝ADT(4)離線安裝ADT下載ADT包/sdk/installing/installing-adt.html離線安裝是在線上安裝無(wú)法進(jìn)行的情況下進(jìn)行或者如果線上安裝需要較長(zhǎng)的時(shí)間57安裝ADT(5)Eclipse中的help->InstallNewSoftware58安裝ADT(6)選擇下載的ADT包進(jìn)行安裝“Add…”“Archive”選擇ADT包59安裝ADT(7)可以看到安裝的細(xì)節(jié)60Stepbystep直到結(jié)束”Finish”61模擬器AVDAndroid虛擬設(shè)備(AndroidVirtualDevice)每個(gè)AVD模擬一套虛擬設(shè)備運(yùn)行Android平臺(tái)62模擬器(2)模擬器的作用調(diào)試和測(cè)試應(yīng)用程式Dalvik虛擬機(jī)的實(shí)現(xiàn)可進(jìn)行不同的硬體配置提供了網(wǎng)路連接模擬器的局限不支持呼叫和接聽(tīng)實(shí)際來(lái)電不支持USB連接不支持照相機(jī)/視頻採(cǎi)集不支持?jǐn)U展耳機(jī)不能確定連接狀態(tài)不能確定電池電量水準(zhǔn)和交流充電狀態(tài)不能確定SD卡的插入/彈出不支持藍(lán)牙63模擬器(3)通過(guò)AVDManager管理模擬器64模擬器(4)創(chuàng)建新的模擬器根據(jù)開(kāi)發(fā)情況填寫(xiě)

各項(xiàng)參數(shù)65模擬器(5)啟動(dòng)模擬器模擬器的尺寸可以調(diào)整66模擬器(6)模擬器的啟動(dòng)過(guò)程可能比較慢,需要等待67Android體系結(jié)構(gòu)Android系統(tǒng)架構(gòu)69Android分層結(jié)構(gòu)Android系統(tǒng)使用了軟體棧(SoftwareStack)來(lái)構(gòu)建Android分層結(jié)構(gòu)從上到下依次為應(yīng)用程式層應(yīng)用程式框架層核心類(lèi)庫(kù)Linux內(nèi)核70應(yīng)用程式層Android應(yīng)用程式層集成了核心應(yīng)用程式,包括email客戶(hù)端SMS短消息程式Google日曆Google地圖流覽器聯(lián)繫人管理程式上述程式在Android系統(tǒng)發(fā)佈時(shí)作為核心程式打包發(fā)佈Android應(yīng)用程式由Java語(yǔ)言編寫(xiě)71應(yīng)用程式框架層該層為開(kāi)發(fā)者提供API框架提供了用來(lái)創(chuàng)建Android程式的類(lèi)簡(jiǎn)化Android組件的重用方式通過(guò)該層的軟體規(guī)範(fàn),可以進(jìn)行功能的擴(kuò)展可以在規(guī)定的安全限制之下進(jìn)行程式之間的共用72應(yīng)用程式框架層(2)核心的應(yīng)用程式服務(wù)活動(dòng)管理器(ActivityManager)管理應(yīng)用程式生命週期及Activity棧視圖(Views)用來(lái)創(chuàng)建程式的用戶(hù)介面,包括列表、網(wǎng)格、文本框等通知管理器(NotificationManager)用來(lái)在狀態(tài)欄顯示應(yīng)用程式給用戶(hù)的通知內(nèi)容管理器(ContentProviders)使得應(yīng)用程式之間可以進(jìn)行數(shù)據(jù)共用資源管理器(ResourceManager)提供對(duì)字串和圖像等非代碼資源的訪問(wèn)73核心類(lèi)庫(kù)Android包含了C/C++庫(kù)被Android系統(tǒng)中不同的組件所使用通過(guò)應(yīng)用程式框架為開(kāi)發(fā)者提供服務(wù)74庫(kù)(Libraries)庫(kù)(Libraries)系統(tǒng)C庫(kù)繼承自BSD的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫(kù)為基於Linux的嵌入式系統(tǒng)進(jìn)行了定制和優(yōu)化75庫(kù)(Libraries)(2)媒體庫(kù)基於PacketVideoOpenCore,第三方庫(kù)支持多種常用音視頻編解碼Mpeg4,H.264,MP3等支持靜態(tài)圖像檔JPG,PNG等SurfaceManager管理顯示子系統(tǒng)為多個(gè)應(yīng)用程式提供2D和3D圖層無(wú)縫融合LibWebCoreWeb流覽器引擎用來(lái)支持Android流覽器和可嵌入的Web視圖76庫(kù)(Libraries)(3)SGL2D圖形引擎的核心庫(kù)SQLite羽量級(jí)關(guān)係資料庫(kù)引擎所有程式可用FreeType用來(lái)支持位圖和向量字體渲染SSL用來(lái)支持安全套接字層(SSL)加密協(xié)議的安全I(xiàn)nternet通信3DLibrariesOpenGL的嵌入式版本OpenGLES可使用硬體3D加速或者軟體3D加速77運(yùn)行時(shí)(Run-time)AndroidRun-Time包括兩個(gè)部分核心庫(kù)Dalvik虛擬機(jī)核心庫(kù)提供JAVA編程語(yǔ)言核心庫(kù)的大多數(shù)功能Dalvik虛擬機(jī)Google為Android設(shè)計(jì)的Java虛擬機(jī)78運(yùn)行時(shí)(Run-time)(2)Dalvik虛擬機(jī)Android程式運(yùn)行於Dalvik虛擬機(jī)之上設(shè)計(jì)與Java虛擬機(jī)不同Dalvik虛擬機(jī)運(yùn)行的是Dex專(zhuān)有檔格式,JVM運(yùn)行Java位元組碼Dalvik是基於寄存器進(jìn)行設(shè)計(jì),JVM是基於棧Android程式與虛擬機(jī)的關(guān)係每個(gè)Android程式都有自己的進(jìn)程,擁有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例Dalvik虛擬機(jī)被設(shè)計(jì)成為一個(gè)設(shè)備,可以高效的同時(shí)運(yùn)行多個(gè)虛擬系統(tǒng)Android程式通過(guò)編譯後還需要通過(guò)dx工具轉(zhuǎn)換為.dex檔Dalvik虛擬機(jī)執(zhí)行.dex檔79運(yùn)行時(shí)(Run-time)(3)Dalvik虛擬機(jī)的特徵專(zhuān)有檔格式.dex通過(guò)dex將應(yīng)用中所定義的許多類(lèi)生成的class檔整合到一個(gè)檔中,減少了冗餘資訊,檔大小和I/O運(yùn)算元量,提高類(lèi)的查找速度增加對(duì)新操作碼的支持檔結(jié)構(gòu)簡(jiǎn)潔,使用等長(zhǎng)指令,執(zhí)行效率高擴(kuò)大了只讀結(jié)構(gòu)大小,利於程式間數(shù)據(jù)共用針對(duì).dex的優(yōu)化針對(duì)小記憶體進(jìn)行了優(yōu)化基於寄存器提高了代碼執(zhí)行效率,代價(jià)是在硬體和通用性上的降低應(yīng)用/進(jìn)程/虛擬機(jī)的對(duì)應(yīng)實(shí)現(xiàn)進(jìn)程之間的隔離,保護(hù)程式安全Dalvik虛擬機(jī)依賴(lài)操作系統(tǒng)底層線程調(diào)度和管理,記憶體分配和管理,互斥等80Linux內(nèi)核Android的操作系統(tǒng)核心Android4.0之前的Linux內(nèi)核是基於Linux2.6Android4.0、4.1和4.2是基於Linux3.0但不是完全的Linux,不包含全部的Linux系統(tǒng)初始化和編程介面和標(biāo)準(zhǔn)的Linux系統(tǒng)是有所不同的Android的操作系統(tǒng)核心服務(wù)可以看做是硬體層和系統(tǒng)(軟體)上層的抽象層安全性,記憶體管理,進(jìn)程管理,網(wǎng)路協(xié)議棧,電源管理和驅(qū)動(dòng)81Linux內(nèi)核(2)顯示驅(qū)動(dòng)(DisplayDriver)基於Linux的幀緩衝(FrameBuffer)驅(qū)動(dòng)照相機(jī)驅(qū)動(dòng)(CameraDriver)基於Linux的VideoforLinux驅(qū)動(dòng)藍(lán)牙驅(qū)動(dòng)(BluetoothDriver)基於藍(lán)牙(IEEE802.15.1標(biāo)準(zhǔn))的無(wú)線傳輸技術(shù)Flash存儲(chǔ)驅(qū)動(dòng)(FlashMemoryDriver)基於MTD的Flash驅(qū)動(dòng)程式BinderIPC驅(qū)動(dòng)Android的特殊驅(qū)動(dòng)程式,具有單獨(dú)的設(shè)備節(jié)點(diǎn),提供進(jìn)程間通信的功能82Linux內(nèi)核(3)USB驅(qū)動(dòng)(USBDriver)為移動(dòng)智能終端的USB介面提供驅(qū)動(dòng)鍵盤(pán)驅(qū)動(dòng)(KeyBoardDriver)作為輸入設(shè)備的鍵盤(pán)驅(qū)動(dòng)WiFi驅(qū)動(dòng)基於IEEE802.11標(biāo)準(zhǔn)的驅(qū)動(dòng)程式音頻驅(qū)動(dòng)(AudioDriver)基於ALSA(AdvancedLinuxSoundArchitecture)的高級(jí)Linux聲音體系驅(qū)動(dòng)PowerManagement(電源管理)電池電量等83Android進(jìn)程與線程進(jìn)程和線程進(jìn)程具有獨(dú)立功能的程式在操作系統(tǒng)中的運(yùn)行活動(dòng)資源分配和調(diào)度的獨(dú)立單位線程進(jìn)程中的獨(dú)立實(shí)體CPU進(jìn)行調(diào)度的基本單位不擁有系統(tǒng)資源,擁有運(yùn)行使用資源進(jìn)程與線程的映射一對(duì)一一對(duì)多多對(duì)多85Android進(jìn)程Android的基礎(chǔ)操作系統(tǒng)在Android的操作系統(tǒng)層是Linux使用Linux進(jìn)程Android進(jìn)程系統(tǒng)會(huì)為Andorid程式分配Linux用戶(hù)ID每個(gè)進(jìn)程會(huì)有相應(yīng)的許可權(quán),實(shí)現(xiàn)進(jìn)程之間的安全用戶(hù)進(jìn)程的創(chuàng)建如應(yīng)用程式組件是第一次啟動(dòng)且無(wú)其他組件運(yùn)行,Android系統(tǒng)為應(yīng)用程式創(chuàng)建單線程的Linux進(jìn)程默認(rèn)同一應(yīng)用程式的所有組件運(yùn)行在同一個(gè)進(jìn)程和線程裏稱(chēng)為main主線程如進(jìn)程已存在,則組件運(yùn)行在已有進(jìn)程或線程中;或者創(chuàng)建額外的線程中;或者指定組件運(yùn)行在其他進(jìn)程中86Android進(jìn)程(2)Android進(jìn)程的控制在manifest檔中來(lái)設(shè)置組件所在的進(jìn)程組件可以運(yùn)行在自己所在程式的進(jìn)程中或者與某些組件共用進(jìn)程進(jìn)程的終止當(dāng)記憶體不足或活動(dòng)進(jìn)程需要記憶體時(shí),Android系統(tǒng)會(huì)根據(jù)記憶體使用情況終止其他進(jìn)程被終止進(jìn)程會(huì)在需要時(shí)重新啟動(dòng)87Android進(jìn)程(3)Android進(jìn)程的生命週期Android系統(tǒng)盡可能維持進(jìn)程在內(nèi)存中的存在移動(dòng)智能終端的記憶體受限,在必要時(shí)系統(tǒng)會(huì)終止舊進(jìn)程來(lái)提供記憶體空間根據(jù)進(jìn)程的重要性來(lái)選擇哪些進(jìn)程會(huì)被先終止重要性小的先被終止Android進(jìn)程的重要性等級(jí)劃分前臺(tái)進(jìn)程可見(jiàn)進(jìn)程服務(wù)進(jìn)程後臺(tái)進(jìn)程空進(jìn)程88Android進(jìn)程(4)前臺(tái)進(jìn)程正在執(zhí)行的程式的進(jìn)程,包括進(jìn)程的一個(gè)activity正在與用戶(hù)交互進(jìn)程擁有一個(gè)綁定在正在與用戶(hù)交互的activity上的service進(jìn)程擁有一個(gè)前臺(tái)運(yùn)行的Service進(jìn)程擁有一個(gè)正在執(zhí)行生命週期中onCreate(),onStart()或onDestory()方法的Service進(jìn)程擁有一個(gè)正在執(zhí)行onReceive()方法的BroadcastReceiver前臺(tái)進(jìn)程通常不多當(dāng)記憶體太小以至於不能容納所有的可能前臺(tái)進(jìn)程時(shí),一些前臺(tái)進(jìn)程就會(huì)被終止89Android進(jìn)程(5)可見(jiàn)進(jìn)程不擁有運(yùn)行於前臺(tái)的組件,包括擁有不在前臺(tái)但可見(jiàn)的activity前臺(tái)activity啟動(dòng)對(duì)話框時(shí)服務(wù)進(jìn)程進(jìn)程擁有綁定到可見(jiàn)activity的Service進(jìn)程運(yùn)行了被startService()啟動(dòng)的Service後臺(tái)進(jìn)程進(jìn)程擁有不可見(jiàn)的activity空進(jìn)程進(jìn)程,不擁有任何active的組件90Android進(jìn)程(6)Android根據(jù)進(jìn)程中當(dāng)前active組件的重要性,來(lái)安排其進(jìn)程級(jí)別例如,如果一個(gè)進(jìn)程擁有一個(gè)service和一個(gè)可見(jiàn)的activity,進(jìn)程會(huì)被定為可見(jiàn)進(jìn)程,而不是服務(wù)進(jìn)程。被其他進(jìn)程所依賴(lài)的進(jìn)程,其級(jí)別可能會(huì)被提高擁有service的進(jìn)程比擁有後臺(tái)activity的進(jìn)程級(jí)別高當(dāng)一個(gè)activity啟動(dòng)一個(gè)需長(zhǎng)時(shí)間執(zhí)行的操作時(shí),啟動(dòng)Service比創(chuàng)建一個(gè)線程效率高使用service能保證操作至少有“service進(jìn)程”的優(yōu)先順序91Android進(jìn)程(7)進(jìn)程間通訊使用遠(yuǎn)程過(guò)程調(diào)用(remoteprocedurecall,RPC)提供的進(jìn)程間通信(IPC)機(jī)制被activity或其他應(yīng)用程式組件調(diào)用的方法將(在其他進(jìn)程中)被遠(yuǎn)程執(zhí)行,而所有的結(jié)果將被返回給調(diào)用者要求把方法調(diào)用及其數(shù)據(jù)分解到操作系統(tǒng)可以理解的程度,並將其從本地的進(jìn)程和地址空間傳輸至遠(yuǎn)程的進(jìn)程和地址空間,然後在遠(yuǎn)程進(jìn)程中重新組裝並執(zhí)行這個(gè)調(diào)用。執(zhí)行後的返回值將被反向傳輸回來(lái)Android提供了執(zhí)行IPC事務(wù)所需的全部代碼需要關(guān)注定義和實(shí)現(xiàn)RPC編程介面上即可92Android線程AndroidUI線程應(yīng)用程式啟動(dòng)時(shí),系統(tǒng)為之創(chuàng)建“main”主線程,有時(shí)也稱(chēng)為UI線程負(fù)責(zé)將事件分發(fā)給相應(yīng)用戶(hù)介面的widget負(fù)責(zé)應(yīng)用程式與AndroidUI組件包之間的交互不是每個(gè)組件的實(shí)例都擁有單獨(dú)的線程UI線程中實(shí)例化同一個(gè)進(jìn)程中的所有組件UI線程分發(fā)對(duì)每個(gè)組件的系統(tǒng)調(diào)用對(duì)系統(tǒng)回調(diào)進(jìn)行回應(yīng)的方法總是運(yùn)行在UI線程AndroidUI線程的要點(diǎn)不要讓UI線程做每一件事情UI線程的阻塞超過(guò)一定時(shí)間(大約5s),會(huì)引起ANR“應(yīng)用程式?jīng)]有回應(yīng)”對(duì)話框單線程模式下不要阻塞UI線程,也不要在UI線程之外訪問(wèn)UI組件包93Android線程(2)工作線程為保證程式的回應(yīng)能力,創(chuàng)建單獨(dú)的線程來(lái)完成耗時(shí)的操作注意:工作線程不能訪問(wèn)UI組件包否則可能導(dǎo)致不明確、不可預(yù)見(jiàn)的後果,並且難以跟蹤需確保工作線程完成工作,UI線程進(jìn)行UI操作通過(guò)使用不同的方法可以達(dá)到代碼複雜程度增加了為確保代碼不會(huì)變的特別複雜並且難以維護(hù),對(duì)於複雜操作可以採(cǎi)用非同步任務(wù)來(lái)完成非同步任務(wù)允許以非同步方式來(lái)操作用戶(hù)介面非同步任務(wù)首先阻塞工作線程,然後在UI線程中進(jìn)行結(jié)果的顯示不需要人工干預(yù)94AndroidSDKAndroidSDKAndroidSDK提供開(kāi)發(fā)Android應(yīng)用程式所使用的開(kāi)發(fā)組件Windows/Linux/Mac平臺(tái)上均有對(duì)應(yīng)SDK包含了Android平臺(tái)上的工具集以Java語(yǔ)言為基礎(chǔ)AndroidSDK提供的主要功能訪問(wèn)攝像頭和GPS等硬體自帶的Google地圖和LBS服務(wù)後臺(tái)服務(wù)SQLite資料庫(kù)數(shù)據(jù)共用和應(yīng)用程式通信圖形支持優(yōu)化的記憶體和進(jìn)程管理…96AndroidSDK(2)AndroidSDK所支持的操作系統(tǒng):WindowsXP(32-bit)orVista(32-or64-bit)orWin7MacOSX10.4.8orlater(x86only)Linux97AndroidSDK目錄在安裝AndroidSDK的android-sdk-windows目錄中98AndroidSDK目錄(2)add-ons保存附加庫(kù)例如GoogleMapsDocsAndroidSDKAPI參考文檔可以對(duì)API進(jìn)行查閱Extras擴(kuò)展插件提供向下相容的功能99AndroidSDK目錄(3)Platforms每個(gè)平臺(tái)的SDK真正的檔根據(jù)APILevel劃分的SDK版本最新的android-17檔夾,進(jìn)入後是Android4.2SDK的主要檔data保存著一些系統(tǒng)資源skins是Android模擬器的皮膚templates是工程創(chuàng)建的默認(rèn)範(fàn)本android.jar是該版本的主要framework檔較早版本還包括了ant為ant編譯腳本images是模擬器映像檔tools目錄裏面包含了重要的編譯工具,比如aapt、aidl、逆向調(diào)試工具dexdump和編譯腳本dx100AndroidSDK目錄(4)platform-tools保存著一些通用工具比如adb、和aapt、aidl、dx等檔,Android123提示這裏和platforms目錄中tools檔夾有些重複(主要指較低版本)從android2.3開(kāi)始這些工具被劃分為通用主要工具adb工具:AndroidDebugBridge,通用調(diào)試工具,可以管理設(shè)備、手機(jī)模擬器的狀態(tài)aapt工具:AndroidAssetPackagingTool,可以查看,創(chuàng)建,更新ZIP格式的文檔附件(zip,jar,apk),也可將資源檔編譯成二進(jìn)位檔aidl工具:AndroidInterfaceDefinitionLanguage,即Android介面描述語(yǔ)言dx工具:AndroidSDK的編譯器。當(dāng)運(yùn)行Java檔,dx.exe將創(chuàng)建一個(gè)帶有.dex尾碼—Dalvik可執(zhí)行格式的檔101AndroidSDK目錄(5)SamplesAndroidSDK自帶的默認(rèn)示例工程包括了較為全面的Android程式設(shè)計(jì)內(nèi)容system-images針對(duì)不同處理器的systemimagesTools包含了重要的工具ddms用於啟動(dòng)Android調(diào)試工具螢?zāi)唤貓D和文件管理器draw9patch是繪製android平臺(tái)的可縮放png圖片的工具sqlite3可以在PC上操作SQLite資料庫(kù)Monkeyrunner是壓力測(cè)試應(yīng)用,模擬用戶(hù)隨機(jī)按鍵mksdcard是模擬器SD映像的創(chuàng)建工具emulator是android模擬器主程序traceview作為android平臺(tái)上重要的調(diào)試工具102AndroidSDK目錄(6)android.jar標(biāo)準(zhǔn)壓縮包包含了編譯後的class檔包含了全部的API103AndroidSDK目錄(7)學(xué)習(xí)Android開(kāi)發(fā)需要瞭解AndroidSDK通過(guò)SDK幫助文檔104AndroidSDK目錄(8)SDK文檔的閱讀需要循序漸進(jìn)瞭解Android瞭解其開(kāi)發(fā)工具鏈瞭解環(huán)境搭建熟悉API並進(jìn)行練習(xí)105AndroidSDK目錄(9)通過(guò)SDK文檔來(lái)深入瞭解Android開(kāi)發(fā)SDK文檔中提供了相應(yīng)的支持106AndroidSDK目錄(10)根據(jù)需要來(lái)進(jìn)行瞭解107AndroidSDK提供的實(shí)例AndroidSDK的Samples提供了豐富的實(shí)例108AndroidSDK提供的實(shí)例(2)SkeletonApp演示如何使用AndroidSDK提供的視圖組件如EditText、Button、ImageView和菜單等ApiDemos演示了許多AndroidAPI,包括了app、content、graphic和media等通過(guò)該示例來(lái)瞭解AndroidAPINotePad記事本程式演示了文本的新建、編輯和刪除等操作LunarLander演示了一個(gè)登陸月球的小遊戲主要涉及到動(dòng)畫(huà)、鍵盤(pán)快捷鍵、線程的實(shí)現(xiàn)等109AndroidSDK提供的實(shí)例(3)Home演示主題類(lèi)軟體,實(shí)現(xiàn)一套新的主題介面並註冊(cè)到系統(tǒng)主題當(dāng)中如何開(kāi)發(fā)主題類(lèi)應(yīng)用SoftKeyBoard演示軟鍵盤(pán)與輸入框事件的綁定,自動(dòng)顯示軟鍵盤(pán)如何使用軟鍵盤(pán)Snake貪吃蛇自定義視圖組件的實(shí)現(xiàn)和控制,遊戲的設(shè)計(jì)開(kāi)發(fā)JetBoy具備聲音支持的遊戲?qū)嵗菔径嗝襟w支持下的遊戲設(shè)計(jì)開(kāi)發(fā)110Android核心開(kāi)發(fā)包android.util包含一些底層輔助類(lèi),例如特定的容器類(lèi),XML輔助工具類(lèi)等android.os提供基本的操作服務(wù),消息傳遞和進(jìn)程間通信IPCandroid.grpics作為核心渲染包,提供圖形渲染功能android.text/android.text.method/android.text.style/android.text.util提供一套豐富的文本處理工具,支持富文本,輸入模式111Android核心開(kāi)發(fā)包(2)android.database包含底層API處理資料庫(kù),方便運(yùn)算元據(jù)庫(kù)表和數(shù)據(jù)android.content提供各種服務(wù)訪問(wèn)數(shù)據(jù)在手機(jī)設(shè)備上,程式安裝到手機(jī)設(shè)備和其他相關(guān)資源,以及內(nèi)容提供展示動(dòng)態(tài)數(shù)據(jù)android.view核心用戶(hù)介面框架android.widget提供標(biāo)準(zhǔn)用戶(hù)介面元素,lists(列表),buttons(按鈕),layoutmanagers(佈局管理器)等,是組成我們介面的基本元素112Android核心開(kāi)發(fā)包(3)android.app提供高層應(yīng)用程式模型,實(shí)現(xiàn)使用Activityvider提供方便調(diào)用系統(tǒng)提供的contentproviders的介面android.telepony提供API交互和手機(jī)設(shè)備的通話介面android.webikit包含一系列工作在基於Web內(nèi)容的API113Android基本組件Android基本組件Android應(yīng)用程式由以下部分構(gòu)成ActivityBroadcastReceiverServiceContentProviderIntent/IntentFilter不是每個(gè)程式都需要上述所有組件對(duì)上述組件進(jìn)行組合來(lái)進(jìn)行應(yīng)用程式的編寫(xiě)通過(guò)AndroidManifest.xml來(lái)實(shí)現(xiàn)具體的組件組合115Activity最基本的Android模組之一提供使用者一個(gè)互動(dòng)式的介面功能可以看做是應(yīng)用中的一個(gè)單獨(dú)螢?zāi)幻總€(gè)Activity被實(shí)現(xiàn)為一個(gè)繼承於Activity基類(lèi)的單獨(dú)的類(lèi)Android應(yīng)用程式中的Activity一般Android應(yīng)用程式中都有多個(gè)ActivityActivity之間互相跳轉(zhuǎn)例如通過(guò)button116Activity(2)Activity的管理所有的Activity在系統(tǒng)中的Activity棧中管理新的Activity執(zhí)行後被放置到棧的頂部,狀態(tài)轉(zhuǎn)變?yōu)閞unningActivity先前的Activity仍然在棧中,但不在前臺(tái)Activity生命週期Active/runningPausedStopFinish/kill117ServiceService服務(wù)運(yùn)行在後臺(tái)的一段代碼長(zhǎng)期存活,運(yùn)行在自己的進(jìn)程或者其他程式的的上下文中取決於自身的需要運(yùn)行時(shí)不具有UI編碼與其他組件的關(guān)係其他組件可以綁定到一個(gè)Service通過(guò)遠(yuǎn)程調(diào)用RPC來(lái)調(diào)用118Service(2)Service的生命週期通過(guò)其他應(yīng)用程式組件啟動(dòng)、終止和控制包括其他service、activity和broadcastreceiver適合於需要定期或者持續(xù)執(zhí)行不與用戶(hù)交互的操作啟動(dòng)的Service具有比非active狀態(tài)的Activity更高的優(yōu)先順序防止被意外的終止當(dāng)Service佔(zhàn)用了必需資源時(shí),會(huì)被終止;在資源可用時(shí),Service會(huì)被自動(dòng)重啟應(yīng)用程式可以作為服務(wù)需要定時(shí)更新,但用戶(hù)交互少119Intent/IntentFilterIntent意圖一種消息傳遞機(jī)制,定義為對(duì)要進(jìn)行的操作的抽象描述與特定的數(shù)據(jù)一起聲明執(zhí)行某個(gè)動(dòng)作的意圖可以進(jìn)行螢?zāi)恢g的切換,描述了應(yīng)用程式想要做什麼Intent的構(gòu)成動(dòng)作或者說(shuō)需要進(jìn)行的動(dòng)作動(dòng)作對(duì)應(yīng)的數(shù)據(jù)120Intent/IntentFilter(2)Intent在Android應(yīng)用程式中的作用啟動(dòng)Activity啟動(dòng)特定的Activity啟動(dòng)未指明的Activity處理Activity的返回值支持Android系統(tǒng)中任意兩個(gè)應(yīng)用程式組件之間的交互在系統(tǒng)範(fàn)圍內(nèi)廣播消息任何應(yīng)用程式都可以註冊(cè)廣播接收器來(lái)監(jiān)聽(tīng)和回應(yīng)廣播的Intent,從而能夠事件來(lái)創(chuàng)建事件驅(qū)動(dòng)的應(yīng)用程式廣播公佈系統(tǒng)事件Intent啟動(dòng)Activity的方式顯示:通過(guò)指定要加載的類(lèi)隱式:通過(guò)請(qǐng)求對(duì)一組數(shù)據(jù)執(zhí)行某個(gè)動(dòng)作121Intent/IntentFilter(3)IntentFilter用來(lái)註冊(cè)Activity、Service和BroadcastReceiver並對(duì)一個(gè)動(dòng)作或一類(lèi)特定數(shù)據(jù)進(jìn)行處理告訴Android系統(tǒng)如何找到合適的處理程式IntentFilter的使用方法使用標(biāo)籤及其屬性來(lái)指定一個(gè)組件所支持的動(dòng)作、分類(lèi)和數(shù)據(jù)可以使用IntentFilter作為插件和擴(kuò)展Android系統(tǒng)對(duì)IntentFilter進(jìn)行解析隱式的Intent被解析為一個(gè)單一的活動(dòng)如果有多個(gè)活動(dòng)可以完成對(duì)指定數(shù)據(jù)的動(dòng)作,那麼啟動(dòng)最合適的活動(dòng)122BroadcastReceiverIntent廣播(Broadcast)事件Intent可以用作不同進(jìn)程間傳遞數(shù)據(jù)和事件的媒介由應(yīng)用程式或者Android系統(tǒng)本身來(lái)廣播一些事件的到來(lái)監(jiān)聽(tīng)(通過(guò)註冊(cè)BroadcastReceiver)並可以獲取Intent中的數(shù)據(jù)BroadcastReceiverBroadcastIntentReceiver要接收和處理廣播Intent(來(lái)自應(yīng)用程式或系統(tǒng)),必須註冊(cè)BroadcastReceiver同時(shí)需要設(shè)置一個(gè)IntentFilter來(lái)指定監(jiān)聽(tīng)的對(duì)象即監(jiān)聽(tīng)哪些Intent123BroadcastReceiver(2)BroadcastReceiver的使用繼承BroadcastReceiver類(lèi),重寫(xiě)方法註冊(cè)和註銷(xiāo)BroadcastReceiverBroadcastReceiver的註冊(cè)在AndroidManifest.xml或者使用特定的方法來(lái)進(jìn)行註冊(cè)限制使用BroadcastReceiver的IntentFilter來(lái)匹配廣播Intent時(shí),處理程式必須在5s內(nèi)完成主要的處理任務(wù)不使用BroadcastReceiver處理124ContentProviderContentProvider內(nèi)容提供器在不同應(yīng)用程式之間共用數(shù)據(jù),通過(guò)一組標(biāo)準(zhǔn)的方法來(lái)存取其中的數(shù)據(jù)抽象出了底層的數(shù)據(jù)源,將應(yīng)用程式層和數(shù)據(jù)層分開(kāi)ContentProvider的許可權(quán)具有完全的控制權(quán)限可以使用URI模型來(lái)進(jìn)行訪問(wèn)支持讀取和寫(xiě)入125ContentProvider(2)訪問(wèn)ContentProvider通過(guò)ContentResolver(內(nèi)容解析器)來(lái)進(jìn)行處理每個(gè)應(yīng)用程式的上下文都有一個(gè)單獨(dú)的ContentResolverContentResolver中包含了操作和查詢(xún)內(nèi)容提供器的方法相關(guān)方法與資料庫(kù)的查詢(xún)相似包括了query,insert,update和delete等不同方法使用具體確定的URI來(lái)訪問(wèn)檔可以對(duì)本地的內(nèi)容提供器進(jìn)行使用Brower,CallLog,Contacts,MediaStore,Settings126Activity簡(jiǎn)介Android核心組件:ActivityActivity活動(dòng)Andorid組件中最基本也是最為常見(jiàn)用的組件在Android應(yīng)用中,一個(gè)Activiy通常就是一個(gè)單獨(dú)的螢?zāi)幻總€(gè)Activity都被實(shí)現(xiàn)為一個(gè)從活動(dòng)基類(lèi)繼承來(lái)的獨(dú)立的類(lèi)活動(dòng)類(lèi)顯示的用戶(hù)介面由視圖控件組成,並對(duì)事件做出回應(yīng)Activity是Android應(yīng)用程式的表示層使用View來(lái)構(gòu)成顯示資訊和回應(yīng)用戶(hù)動(dòng)作的UI可以看做是開(kāi)發(fā)環(huán)境中的Form應(yīng)用程式越複雜,需要的螢?zāi)豢赡茉蕉?28Activity的創(chuàng)建與使用Activity的創(chuàng)建和使用創(chuàng)建Activity在Activity類(lèi)的基礎(chǔ)上進(jìn)行擴(kuò)展在Activity中定義UI並實(shí)現(xiàn)其功能基本Activity類(lèi)提供了封裝了窗口顯示處理功能的空白螢?zāi)唤换ズ惋@示還需要進(jìn)行設(shè)計(jì)Activity的註冊(cè)應(yīng)用程式中的Activity需要在AndroidManifest.xml中進(jìn)行註冊(cè)沒(méi)有對(duì)應(yīng)標(biāo)籤的Activity不能被啟動(dòng)130Activity的創(chuàng)建和使用(2)在android.app.Activity類(lèi)中,Android定義了一系列方法在應(yīng)用程式中通過(guò)對(duì)這些方法的複寫(xiě)來(lái)完成對(duì)Activity的創(chuàng)建和使用publicclassOurActivityextendsActivity{ protectedvoidonCreate(BundlesavedInstanceState); protectedvoidonStart(); protectedvoidonReStart(); protectedvoidonResume(); protectedvoidonPause(); protectedvoidonStop(); protectedvoidonDestroy(); }131Activity的創(chuàng)建和使用(3)protectedvoidonCreate(BundlesavedInstanceState)一個(gè)Activity的實(shí)例被啟動(dòng)時(shí)調(diào)用的第一個(gè)方法一般都會(huì)覆蓋該方法作為應(yīng)用程式的一個(gè)入口點(diǎn)完成一些初始化數(shù)據(jù)、設(shè)置用戶(hù)介面等工作大多數(shù)情況下,在該方法中從xml中加載設(shè)計(jì)好的用戶(hù)介面。例如setContentView(R.layout.main);也可從savedInstanceState中讀取保存到存儲(chǔ)設(shè)備中的數(shù)據(jù)需要判斷savedInstanceState是否為null,因?yàn)锳ctivity第一次啟動(dòng)時(shí)並沒(méi)有數(shù)據(jù)被存貯在設(shè)備中

if(savedInstanceState!=null){ savedInstanceState.get("Key"); }132Activity的創(chuàng)建和使用(4)protectedvoidonStart()在onCreate()方法之後被調(diào)用,或者在Activity從Stop狀態(tài)轉(zhuǎn)換為Active狀態(tài)時(shí)被調(diào)用ProtectedvoidonReStart()在Activity被停止後調(diào)用protectedvoidonResume()在Activity從Pause狀態(tài)轉(zhuǎn)換到Active狀態(tài)時(shí)被調(diào)用133Activity的創(chuàng)建和使用(5)protectedvoidonPause()在Activity從Active狀態(tài)轉(zhuǎn)換到Pause狀態(tài)時(shí)被調(diào)用必要時(shí)也需要保存狀態(tài)和數(shù)據(jù)protectedvoidonStop()在Activity從Active狀態(tài)轉(zhuǎn)換到Stop狀態(tài)時(shí)被調(diào)用一般在這裏保存Activity的狀態(tài)資訊protectedvoidonDestroy()在Activity被結(jié)束時(shí)調(diào)用,它是被結(jié)束時(shí)調(diào)用的最後一個(gè)方法一般完成釋放資源,清理記憶體等工作134HelloWorld!Java檔----應(yīng)用程式原始檔案android本身相當(dāng)一部分都是用java編寫(xiě)而成android的應(yīng)用使用java來(lái)開(kāi)發(fā)Class檔----Java編譯後的目標(biāo)檔Google使用Dalvik來(lái)運(yùn)行應(yīng)用程式Android的class檔是編譯過(guò)程中的中間目標(biāo)檔,需要鏈接成dex檔才能在Dalvik上運(yùn)行135HelloWorld!(2)Dex檔----Android平臺(tái)上的可執(zhí)行檔Android虛擬機(jī)Dalvik支持的位元組碼檔格式Apk檔----Android上的安裝檔Apk是Android安裝包的擴(kuò)展名,一個(gè)Android安裝包包含了與該Android應(yīng)用程式相關(guān)的所有檔apk檔將AndroidManifest.xml檔、應(yīng)用程式代碼(.dex檔)、資源檔和其他檔打成一個(gè)壓縮包一個(gè)工程只能打進(jìn)一個(gè).apk檔apk檔的本質(zhì)是一個(gè)zip包136HelloWorld!(3)Eclipse自動(dòng)生成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)一個(gè)Activity就是一個(gè)類(lèi)這個(gè)類(lèi)要繼承於Activity重寫(xiě)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)每一個(gè)Activity都需要在AndroidMainfest.xml中檔當(dāng)中進(jìn)行配置<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添加必要的控件通過(guò)findViewById(控件的id);可以得到所要顯示的控件例如取得TextView的控件 TextViewtextView=(TextView)findViewById(R.id.Test);142HelloWorld!(9)佈局檔中的屬性很多通過(guò)佈局檔來(lái)定義重要的屬性android:layout_width寬度android:layout_height高度match_parent|wrap_contentandroid:layout_weight:權(quán)重(默認(rèn)為0)android:id唯一標(biāo)識(shí),用於在程式或配置檔中引用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>將要顯示內(nèi)容:HelloWorld.HelloWorld!(11)RUN145RUNHelloWorld!(12)146HelloWorld!(13)147HelloWorld!(14)Activity是Android應(yīng)用程式的用戶(hù)介面一個(gè)Activity中可以放置很多控件Activity也可以理解為控件的容器148按鈕列表文本HelloWorld!(15)模擬器螢?zāi)蛔畲笾С?280*80010.1”Tablet,WXGA7.3”Nexus7最小支持240*3202.7”QVGA149HelloWorld!(16)命令行運(yùn)行啟動(dòng)模擬器emulator-avd2.3–scaleauto150HelloWorld!(17)命令行運(yùn)行連接模擬器telnetlocalhost5554151HelloWorld!(18)命令行運(yùn)行撥打電話:gsmcall13911110086152HelloWorld!(19)命令行運(yùn)行發(fā)送短信:smssenelloWorld153Android程式結(jié)構(gòu)/srcJava源代碼存放目錄/gen自動(dòng)生成目錄存放所有由Android開(kāi)發(fā)工具自動(dòng)生成的檔154Android程式結(jié)構(gòu)(2)/gen/R.javaR.java檔由Android開(kāi)發(fā)工具自動(dòng)產(chǎn)生的Android開(kāi)發(fā)工具會(huì)自動(dòng)根據(jù)放入res目錄的xml介面檔、圖示與常量,同步更新修改R.java檔R.java檔是由開(kāi)發(fā)工具自動(dòng)生成的,應(yīng)避免手工修改R.javaR.java在應(yīng)用中起到了字典的作用,它包含了介面、圖示、常量等各種資源的id通過(guò)R.java,應(yīng)用可以很方便地找到對(duì)應(yīng)資源另外編繹器也會(huì)檢查R.java列表中的資源是否被使用到,沒(méi)有被使用到的資源不會(huì)編繹進(jìn)軟體中,這樣可以減少應(yīng)用在手機(jī)佔(zhàn)用的空間155Android程式結(jié)構(gòu)(3)/res資源(Resource)目錄存放應(yīng)用使用到的各種資源,如xml介面檔,圖片或數(shù)據(jù)156Android程式結(jié)構(gòu)(4)res目錄下的資源檔除string之外,還可以定義color,dimensstring-array(子標(biāo)記為item)每種資源都需要定義name屬性資源檔放在res/values目錄下可以是單獨(dú)的檔可以分類(lèi)放在不同檔中檔案名任意資源目錄中不能隨意創(chuàng)建子目錄佈局資源的檔案名和圖片資源的檔案名只允許小寫(xiě)字母和數(shù)字157Android程式結(jié)構(gòu)(5)res/xml目錄其他資源任意XML檔,程式中用R.xml.檔案名訪問(wèn)res/raw目錄原始資源程式中用Resources對(duì)象.openRawResource(R.raw.XXX)獲得一個(gè)輸入流原始資源不會(huì)被編譯為二進(jìn)位asset放入assets目錄,系統(tǒng)不會(huì)自動(dòng)生成id,程式中用Resources對(duì)象.getAssets().open(檔案名)獲得輸入流assets目錄則可以隨意創(chuàng)建子目錄158Android程式結(jié)構(gòu)(6)對(duì)資源的引用程式中利用R.資源類(lèi)型.資源名訪問(wèn)例如R.layout.mainR.id.abc或者使用getResources()得到Resources對(duì)象,用於將資源的id值轉(zhuǎn)為相應(yīng)的對(duì)象例如getText,getColor,getDrawableXML檔中利用@資源類(lèi)型/資源名訪問(wèn)例如@id/abc@+id/abc表示添加一個(gè)id資源“abc”159Android程式結(jié)構(gòu)(7)AndroidManifest.xml列出了應(yīng)用程式所提供的功能可以指定應(yīng)用程式使用到的服務(wù)(如電話服務(wù)、互聯(lián)網(wǎng)服務(wù)、短信服務(wù)、GPS服務(wù)等等)新添加一個(gè)Activity的時(shí)候,也需要在這個(gè)檔中進(jìn)行相應(yīng)配置,只有配置好後,才能調(diào)用此Activity包括了安全訪問(wèn)許可權(quán)perties專(zhuān)案環(huán)境資訊,一般是不需要修改此檔160Activity的生命週期Activity的生命週期Android應(yīng)用程式不能控制所擁有進(jìn)程的生存期Android系統(tǒng)在運(yùn)行時(shí)管理每個(gè)應(yīng)用程式的進(jìn)程同樣業(yè)管理每個(gè)進(jìn)程內(nèi)的每個(gè)活動(dòng)Activity的管理所有的Activity由Android系統(tǒng)的Activity棧管理當(dāng)前所有正在運(yùn)行的進(jìn)程的後進(jìn)先出的集合Activity的狀態(tài)由它在棧中的位置所決定一個(gè)新的Activity執(zhí)行後被放置到棧的頂端,變成“runningactivity”,此前的Activity存在於堆疊中,一般不在前景如果通過(guò)“Back”返回此前的Activity或者當(dāng)前Activity被關(guān)閉,棧中的下一個(gè)活動(dòng)變成棧頂活動(dòng),並成為活動(dòng)狀態(tài)162Activity的生命週期(2)Activity的狀態(tài)Activity在系統(tǒng)中不斷的被創(chuàng)建和銷(xiāo)毀在Activity棧中被移進(jìn)和移出Activity在不同的狀態(tài)中轉(zhuǎn)換Activity的4個(gè)狀態(tài)活動(dòng)狀態(tài)(Active)暫停狀態(tài)(Paused)停止?fàn)顟B(tài)(Stop)非活動(dòng)狀態(tài)(Finish/Kill)163Activity的生命週期(3)Activity:活動(dòng)狀態(tài)位於Activity棧的棧頂可見(jiàn)的、focused的前臺(tái)Activity處?kù)段災(zāi)坏淖钌蠈覣ndroid系統(tǒng)會(huì)盡力維持活動(dòng)狀態(tài)Activity的運(yùn)行通過(guò)適當(dāng)?shù)匿N(xiāo)毀其他的Activity來(lái)保證活動(dòng)狀態(tài)Activity所需的資源當(dāng)有某個(gè)Activity變?yōu)榛顒?dòng)狀態(tài)時(shí),該活動(dòng)被暫停處?kù)秔aused狀態(tài)164Activity的生命週期(4)Activity:暫停狀態(tài)特定情況下可見(jiàn)但不是焦點(diǎn)的Activity非全屏或者半透明狀態(tài)仍處?kù)督芶ctive的狀態(tài)自身的狀態(tài)和數(shù)據(jù)都存在與窗口管理程式保持聯(lián)繫不能接收用戶(hù)的輸入事件被系統(tǒng)終止當(dāng)系統(tǒng)記憶體資源不足時(shí)會(huì)被終止?fàn)顟B(tài)的轉(zhuǎn)變不可見(jiàn)時(shí)轉(zhuǎn)變?yōu)橥V範(fàn)顟B(tài)165Activity的生命週期(5)Activity:停止?fàn)顟B(tài)當(dāng)一個(gè)Activity被其他的Activity完全的遮蓋住時(shí),Activity的狀態(tài)發(fā)生變化仍保有其狀態(tài)及數(shù)據(jù)已變?yōu)椴豢梢?jiàn),畫(huà)面是隱藏且不需要更新停止?fàn)顟B(tài)的Activity會(huì)被終止當(dāng)系統(tǒng)記憶體不足時(shí),stop狀態(tài)的Activity首先被終止已釋放記憶體狀態(tài)的轉(zhuǎn)換Activity退出或者被關(guān)閉166Activity的生命週期(6)Activity的終止不受程式員控制可以通過(guò)程式創(chuàng)建和運(yùn)行Activity,並使用方法停止Activity終止Activity由Android系統(tǒng)決定當(dāng)Activity處?kù)秔ause或者stop狀態(tài)時(shí)可能被系統(tǒng)終止並回收應(yīng)用程式運(yùn)行過(guò)程中的一些狀態(tài)(用戶(hù)輸入等)需要保存到持久存儲(chǔ)中應(yīng)用程式中啟動(dòng)了其他後臺(tái)線程,同樣也需要進(jìn)行處理否則會(huì)失去運(yùn)行時(shí)的狀態(tài)或輸入或者由於沒(méi)有處理後臺(tái)線程導(dǎo)致異常167Activity的生命週期(7)Activity狀態(tài)的轉(zhuǎn)換除棧頂Activity外均為pause/stop/finish/kill狀態(tài)一旦棧頂Activity失去焦點(diǎn)就變?yōu)閜ause/stop/finish/kill狀態(tài),同時(shí)新的Activity或者棧中的下一個(gè)Activity成為棧頂Activity轉(zhuǎn)換的控制狀態(tài)的轉(zhuǎn)換由系統(tǒng)控制,對(duì)用戶(hù)不可見(jiàn)轉(zhuǎn)換過(guò)程中所存儲(chǔ)的數(shù)據(jù)和狀態(tài)在Activity轉(zhuǎn)換為active狀態(tài)時(shí)就需要進(jìn)行恢復(fù)168Activity的生命週期(8)169完整生命週期可視生命週期前臺(tái)生命週期Activity的生命週期(9)完整生命週期Activity的完整生命週期自第一次調(diào)用onCreate()方法開(kāi)始,到調(diào)用onDestroy()為止如果Activity所在的進(jìn)程被終止,那麼即使沒(méi)有調(diào)用onDestroy方法Activity也結(jié)束其存在在onCreate()中設(shè)置所有“全局”狀態(tài)以完成初始化初始化Activity擴(kuò)展(inflate)UI分配對(duì)類(lèi)變數(shù)的引用將數(shù)據(jù)綁定到控件創(chuàng)建服務(wù)和線程在onDestroy()中釋放所有系統(tǒng)資源通過(guò)重寫(xiě)來(lái)清除,保證所有外部資源被關(guān)閉170Activity的生命週期(10)

Activity的可視生命週期自onStart()

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論