Android程序设计课件_第1页
Android程序设计课件_第2页
Android程序设计课件_第3页
Android程序设计课件_第4页
Android程序设计课件_第5页
已阅读5页,还剩529页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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)

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论