Android 開(kāi)發(fā)技術(shù)培訓(xùn)1_第1頁(yè)
Android 開(kāi)發(fā)技術(shù)培訓(xùn)1_第2頁(yè)
Android 開(kāi)發(fā)技術(shù)培訓(xùn)1_第3頁(yè)
Android 開(kāi)發(fā)技術(shù)培訓(xùn)1_第4頁(yè)
Android 開(kāi)發(fā)技術(shù)培訓(xùn)1_第5頁(yè)
已閱讀5頁(yè),還剩175頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、android 開(kāi)發(fā)技術(shù)培訓(xùn)沈大海android android 的歷史的歷史200320042005200620072008200920102android and oha (open handset alliance)android and oha (open handset alliance) google與2007年11月5日宣布組建的一個(gè)全球性的聯(lián)盟組織。 聯(lián)盟成員將支持盟主google 發(fā)布的android 手機(jī)操作系統(tǒng)或者應(yīng)用軟件,共同開(kāi)發(fā)名為android 的開(kāi)放源代碼的移動(dòng)系統(tǒng)。共同對(duì)抗 symbian, windows mobile, iphone等系統(tǒng)。3android

2、oha android oha 生態(tài)系統(tǒng)生態(tài)系統(tǒng)4android android 市場(chǎng)份額市場(chǎng)份額5android kernel versionandroid based on generic linux 2.6 kernel android 1.0 based on linux2.6.25android 1.5(cupcake) based on linux2.6.27android 1.6(donut) based on linux2.6.29android 2.0/2.1(clair) based on linux2.6.29android 2.2(froyo) based on lin

3、ux 2.6.32android 2.3(gingerbread) based on linux 2.6.35android 3.0(honeycomb) based on linux 2.6.36 android special drivers: ashmem logger binder android power management low memory killer and android pmem android release history2008q2q3q4q12009q2q3q4q12010q2q3q4q12011q2q3q4q1android 1.0(sept 2008)a

4、ndroid 1.1(feb 2009)android 1.5cupcake(april 2009)android 1.6donut(sept 2009)android 2.0/2.1eclair(oct 2009)android 2.2froyo(may 2010)android 2.3gingerbread(dec 2010)android 3.0honeycomb(feb 2011)android 3.xice cream sandwich(oct/nov 2011?)release datenot yet announcedandroid release cycles range fr

5、om 1 to 9 months.android framework architectureandroid framework architecture9android體系結(jié)構(gòu)應(yīng)用程序應(yīng)用程序(applications):依據(jù)user的期望而將af的組件及l(fā)ibaraies組件組合而成的高階服務(wù)。應(yīng)用框架應(yīng)用框架(application framework, 簡(jiǎn)稱簡(jiǎn)稱af):這是結(jié)合applications與libraries的幕后主架構(gòu),讓libraries組件能不斷地為applications所重復(fù)使用(reuse)。 豐富而又可擴(kuò)展的視圖(豐富而又可擴(kuò)展的視圖(views) 內(nèi)容提供器

6、(內(nèi)容提供器(content providers) 資源管理器(資源管理器(resource manager) 通知管理器通知管理器 (notification manager) 活動(dòng)管理器(活動(dòng)管理器( activity manager)libraries:android里已經(jīng)提供的c/c+庫(kù)存組件(或稱模塊)。例如,sqlite數(shù)據(jù)庫(kù)系統(tǒng)、opengl 3d繪圖系統(tǒng)等。android runtime:java語(yǔ)言層級(jí)的virtual machine。linux核心核心:android依賴linux 2.6來(lái)提供核心的服務(wù),例如內(nèi)存管理、進(jìn)程(process)管理、執(zhí)行緒(thread)管理

7、等。10androidandroid層次層次-kernel-kernelandroid基于linux 2.6提供核心系統(tǒng)服務(wù),例如:安全、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)堆棧、驅(qū)動(dòng)模型。linux kernel也作為硬件和軟件之間的抽象層,它隱藏具體硬件細(xì)節(jié)而為上層提供統(tǒng)一的服務(wù)。使用binder作為進(jìn)程間通訊機(jī)制,取代傳統(tǒng)進(jìn)程間通訊機(jī)制11android hardware abstraction layer android hardware abstraction layer 用戶空間的c/c+庫(kù)遵循apache協(xié)議定義android需要linux driver實(shí)現(xiàn)的接口將android徹底和硬件抽

8、象出來(lái)12androidandroid層次結(jié)構(gòu)層次結(jié)構(gòu)-android-android runtime runtime android包含一個(gè)核心庫(kù)的集合,提供大部分在java編程語(yǔ)言核心類庫(kù)中可用的功能。dalvik虛擬機(jī)則是基于寄存器的,而非大多數(shù) 虛擬機(jī)所采用的基于棧的實(shí)現(xiàn)dalvik虛擬機(jī)依賴于linux 內(nèi)核提供基本功能, 如線程和底層內(nèi)存管理。 13android包含一個(gè)c/c+庫(kù)的集合,供android系統(tǒng)的各個(gè)組件使用。這些功能通過(guò)android的應(yīng)用程序框架(application framework)暴露給開(kāi)發(fā)者。下面列出一些核心庫(kù):系統(tǒng)系統(tǒng)c庫(kù)庫(kù)多媒體庫(kù):多媒體庫(kù):ope

9、ncore界面管理界面管理libwebcoresgl3d庫(kù)庫(kù)freetypesqliteandroid層次結(jié)構(gòu)層次結(jié)構(gòu)-libraries14androidandroid層次結(jié)構(gòu)層次結(jié)構(gòu)applicationapplication framework framework通過(guò)提供開(kāi)放的開(kāi)發(fā)平臺(tái),android使開(kāi)發(fā)者能夠編制極其豐富和新穎的應(yīng)用程序。開(kāi)發(fā)者可以自由地利用設(shè)備硬件優(yōu)勢(shì)、訪問(wèn)位置信息、運(yùn)行后臺(tái)服務(wù)、設(shè)置鬧鐘、向狀態(tài)欄添加通知等等,很多很多。開(kāi)發(fā)者可以完全使用核心應(yīng)用程序所使用的框架apis。應(yīng)用程序的體系結(jié)構(gòu)旨在簡(jiǎn)化組件的重用,任何應(yīng)用程序都能發(fā)布他的功能且任何其他應(yīng)用程序可以使用這

10、些功能(需要服從框架執(zhí)行的安全限制)。這一機(jī)制允許用戶替換組件。 所有的應(yīng)用程序其實(shí)是一組服務(wù)和系統(tǒng),包括:viewactivitymanagercontentprovidernotificationmanager15androidandroid層次結(jié)構(gòu)層次結(jié)構(gòu)applicationsapplications android魅力的終極體現(xiàn): 對(duì)用戶:良好的用戶體驗(yàn),強(qiáng)大的用戶親和力 對(duì)開(kāi)發(fā)者:快速而靈活的開(kāi)發(fā)平臺(tái),讓開(kāi)發(fā)者的靈感能快速轉(zhuǎn)化為產(chǎn)品16android processesandroid applicationsandroid apk build and packaging andro

11、id application unpackaging and run三種開(kāi)發(fā)形式 sdk開(kāi)發(fā) windows linux mac ndk開(kāi)發(fā) windows linux 源碼開(kāi)發(fā) (完全源代碼,linux中開(kāi)發(fā)) linux操作系統(tǒng)知識(shí) linux內(nèi)核知識(shí)(c語(yǔ)言) linux驅(qū)動(dòng)程序知識(shí)(c語(yǔ)言) android底層庫(kù)(c語(yǔ)言、c+) dalvik虛擬機(jī)(c+、java) android gui系統(tǒng)(c+、java) 音頻、視頻和多媒體(c語(yǔ)言、c+、java) 電話部分的(c語(yǔ)言、c+、java) 連接部分(c語(yǔ)言、c+、java) 傳感器部分(c語(yǔ)言、c+、java)android源碼開(kāi)

12、發(fā)知識(shí)結(jié)構(gòu):android應(yīng)用開(kāi)發(fā)知識(shí)結(jié)構(gòu): java語(yǔ)言知識(shí) 應(yīng)用程序架構(gòu) gui設(shè)計(jì)基礎(chǔ)知識(shí) 各種視圖的使用 2d/3d圖形api 應(yīng)用程序的設(shè)計(jì)思想androidndk開(kāi)發(fā)知識(shí)結(jié)構(gòu): java語(yǔ)言知識(shí) 應(yīng)用程序架構(gòu) jni技術(shù) linux下c編程android debug toolsadb (android debug bridge)dmtracedumpemulatorlogcat mksdcardmonkeysqlite3eclips gdb /gdbserver 搭建開(kāi)發(fā)環(huán)境搭建開(kāi)發(fā)環(huán)境eclipseeclipse/adt /adt 下載并安裝eclipse:http:/www.e

13、/downloads/ 下載sdk安裝包: http:/ 啟動(dòng)eclipse-help-install new softwares2 在”work with”中輸入一個(gè)任意名字3 將https:/dl- 添加到網(wǎng)址欄,點(diǎn)擊”add”按鈕4 在”work with”的下拉列表中選定剛剛添加的item,在詳細(xì)信息框中會(huì)有選擇列表,推薦全部安裝,將開(kāi)始在線安裝過(guò)程31搭建開(kāi)發(fā)環(huán)境搭建開(kāi)發(fā)環(huán)境eclipseeclipse/adt /adt 32搭建開(kāi)發(fā)環(huán)境安裝搭建開(kāi)發(fā)環(huán)境安裝sdk sdk 點(diǎn)擊window-android sdk and avd manager-available

14、 packages,安裝需要的sdk創(chuàng)建一個(gè)新的avd1 通過(guò)window-android sdk and avd manager-virtual devices-new2 通過(guò)命令行創(chuàng)建: 開(kāi)始-運(yùn)行-cmd-android create avd n avd-name t 6(創(chuàng)建2.0的)默認(rèn)創(chuàng)建的路徑是c:documents and settingsuser-name.androidavd33生成一個(gè)新的工程生成一個(gè)新的工程 用eclipse創(chuàng)建一個(gè)新的android應(yīng)用:file-new-android project在彈出的提示對(duì)話框中所有填寫(xiě)所有項(xiàng)目:項(xiàng)目名稱所使用sdk版本應(yīng)用程

15、序名稱包名34 35 運(yùn)行第一個(gè)運(yùn)行第一個(gè)helloandroidhelloandroid36從從helloandroidhelloandroid分析分析androidandroid應(yīng)用的要素應(yīng)用的要素androidmanifest.xmlres-所有的資源 drawable-圖片文件 layout-布局文件 values-字符串以及屬性定義文件src-代碼目錄37目錄的組織 anim/drawable/layout/values/xml/raw/1)anim目錄錄下存放著描述animation類型的xml文件。2) drawable目錄該目錄下存放著.png,.jpg等圖片文件。3) lay

16、out目錄下存放著屏幕ui的layout文件,格式為xml。4)values目錄下可以存放多種資源類型的xml文件,例如定義了數(shù)組的array.xml,定義了顏色的colors.xml,定義了dimension的dimnes.xml,定義了字符串的strings.xml,定義了style的styles.xml。5)xml目錄存放了用戶自定義的xml文件。6) raw目錄可存放了用戶的原始數(shù)據(jù)文件,如聲音文件等,這些文件在編譯應(yīng)用程序過(guò)程中不被編譯,直接加到apk文件中。38aapt打包示意圖39限定符的類型和有效的值 限定符有效值語(yǔ)言語(yǔ)言碼,遵循iso 639-1標(biāo)準(zhǔn),小寫(xiě),如en, zh.地

17、區(qū)遵循iso 3166-1-alpha-2標(biāo)準(zhǔn),大寫(xiě),前面加小寫(xiě)的“r”,例如:rus,rcn屏幕朝向port, land, square屏幕像素密度92dpi, 108dpi等觸摸屏類型notouch, stylus, finger鍵盤是否可用keysexposed, keyshidden首選的輸入法nokeys, qwerty, 12key首選非觸摸導(dǎo)航方法nonav, dpad, trackball, wheel屏幕尺寸320 x240, 640 x480等,大尺寸必須在前40資源管理框架41androidandroid應(yīng)用的要素應(yīng)用的要素androidmanifestandroidma

18、nifestandroidmanifext的作用:描述了程序包的全局變量, 包括暴露的應(yīng)用組件(activities, services等等)和為每個(gè)組件的實(shí)現(xiàn)類, 什么樣的數(shù)據(jù)可以操作, 以及在什么地方運(yùn)行 42androidmanifestandroidmanifest的主要元素的主要元素幾乎所有的androidmanifest.xml(以及許多其他android的xml的文件)在第一個(gè)元素中包含了命名空間的聲明xmlns:android=“http:/ application:application是android應(yīng)用內(nèi)最高級(jí)別(top level)的模塊,每個(gè)應(yīng)用內(nèi)最多只能有一個(gè)app

19、lication,如果應(yīng)用沒(méi)有指定該模塊,一個(gè)默認(rèn)的application將被啟用。application將在應(yīng)用啟動(dòng)時(shí)最先被加載,并存活在應(yīng)用的整個(gè)運(yùn)行時(shí)生命周期。因此一些初始化的工作適合在本模塊完成. application元素有許多屬性,其中:“persistent”表示本應(yīng)用是否為常駐內(nèi)存,“enable”表示本應(yīng)用當(dāng)前是否應(yīng)當(dāng)被加載。43android-activity1.創(chuàng)建activityxxxactivity extends activity.2.配置androidmanifest.xml文件application.launchmode:standard:每次啟動(dòng)新的活動(dòng)窗口(

20、new操作)singletop:如果在棧頂是目標(biāo)活動(dòng),則直接打開(kāi).否則開(kāi)啟新的活動(dòng)窗口(new).singletask:同一任務(wù)內(nèi)不再實(shí)例化,不同任務(wù)需要實(shí)例化.singleinstance:不論是否是同一任務(wù),只要打開(kāi)就共享.androidmanifestandroidmanifest的主要元素的主要元素activity:activity是application模塊的運(yùn)行時(shí)子元素,標(biāo)識(shí)了一個(gè)ui。除了application,一個(gè)應(yīng)用可以聲明并實(shí)現(xiàn)零至多個(gè)其它運(yùn)行時(shí)模塊,activity也同樣。activity也包含了許多定義它工作狀態(tài)的屬性,其中:“name”是必須的,它指定了該activi

21、ty所在的文件名,如果該文件所屬包不同于該應(yīng)用的包名(即本描述文件的最開(kāi)始處),那么名字前面需要加入所在包名。activity通過(guò)增加intent-fliter來(lái)標(biāo)識(shí)哪些intent可以被處理,同時(shí)intent也是調(diào)度activity的主要參數(shù)。service:service也是application的運(yùn)行時(shí)子元素。service屬于后臺(tái)模塊,啟動(dòng)后將長(zhǎng)時(shí)間運(yùn)行,除非停止該service或所在應(yīng)用進(jìn)程被殺死45androidandroid應(yīng)用組成元素應(yīng)用組成元素layoutlayout android 的ui 布局都以layout 作為容器,在上面按照規(guī)定排列控件,這方面跟java 的swin

22、g 和lwuit 很像??丶鷏ayout 有很多屬性是一樣的,可以在properties 里面修改,跟.net/delphi 等rad 類似,其中最常用的屬性有以下這些:id=“+id/edtinput”,id 是連接ui 與代碼的橋梁 layout_width=fill_parent ,自動(dòng)填充至屏幕寬度,layout_height 同理 常用的layout有:linearlayoutrelativelayoutframelayoutabsolutelayoutadapterview46androidandroid應(yīng)用四大組件簡(jiǎn)介應(yīng)用四大組件簡(jiǎn)介lactivitylservicelcont

23、entproviderlbroadcastreceiver47activityactivity簡(jiǎn)介簡(jiǎn)介l展現(xiàn)為一個(gè)用戶可視化界面lactivity可以多種形式呈現(xiàn),如全屏模式,對(duì)話框模式,透明模式等lactivity的部分重要屬性:landroid:label=string resource landroid:icon=drawable resource landroid:launchmode=multiple | singletop |singletask | singleinstance 48activityactivity的四個(gè)狀態(tài)的四個(gè)狀態(tài)1.active/runing一個(gè)新 acti

24、vity 啟動(dòng)入棧后,它在屏幕最前端,處于棧的最頂端,此時(shí)它處于可見(jiàn)并可和用戶交互的激活狀態(tài)。2. paused 當(dāng) activity 被另一個(gè)透明或者 dialog 樣式的 activity 覆蓋時(shí)的狀態(tài)。此時(shí)它依然與窗口管理器保持連接,系統(tǒng)繼續(xù)維護(hù)其內(nèi)部狀態(tài),所以它仍然可見(jiàn),但它已經(jīng)失去了焦點(diǎn)故不可與用戶交互。3. stoped 當(dāng) activity 被另外一個(gè) activity 覆蓋、失去焦點(diǎn)并不可見(jiàn)時(shí)處于 stoped狀態(tài)。4. killed activity 被系統(tǒng)殺死回收或者沒(méi)有被啟動(dòng)時(shí)處于 killed狀態(tài)。49activityactivity的各個(gè)回調(diào)函數(shù)與狀態(tài)的各個(gè)回調(diào)函數(shù)與

25、狀態(tài) 之間的關(guān)系之間的關(guān)系l protected void oncreate(bundle savedinstancestate); l protected void onstart(); l protected void onresume(); l protected void onpause(); l protected void onstop(); l protected void ondestroy();50android-應(yīng)用程序的響應(yīng)性在android中,應(yīng)用的響應(yīng)性被活動(dòng)管理器(activity manager)和窗口管理器(window manager(這兩個(gè)系統(tǒng)服務(wù)所監(jiān)視.當(dāng)

26、用戶觸發(fā)了輸入事件(如鍵盤輸入,點(diǎn)擊按鈕等), 如果應(yīng)用5秒內(nèi)沒(méi)有響應(yīng)用戶的輸入事件,那么,android會(huì)認(rèn)為該應(yīng)用無(wú)響應(yīng),便彈出anr(application no response)對(duì)話框,如右圖.在正常情況下,android程序會(huì)在一條單線程里運(yùn)行.如果activity要處理一件比較耗時(shí)的工作,應(yīng)該交給子線程完成,否側(cè)會(huì)因?yàn)橹骶€程被阻塞,后面的用戶輸入事件因沒(méi)能在5秒內(nèi)響應(yīng),導(dǎo)致應(yīng)用出現(xiàn)anr對(duì)話框.serviceservice簡(jiǎn)簡(jiǎn) 介介是什么:service在android中是一種長(zhǎng)生命周期的組件,它不實(shí)現(xiàn)任何用戶界面用來(lái)做什么:實(shí)現(xiàn)不需要用戶界面但是需要一直運(yùn)行的功能,如:音樂(lè)播放

27、器怎么用:實(shí)現(xiàn)一個(gè)自己的service啟動(dòng)執(zhí)行:context.startservice()/context.bindservice()52contentprovidercontentprovider簡(jiǎn)介簡(jiǎn)介lcontentprovider是android提供的一種標(biāo)準(zhǔn)的共享數(shù)據(jù)的機(jī)制,l應(yīng)用程序可以通過(guò)content provider訪問(wèn)其它應(yīng)用程序的一些私有數(shù)據(jù)lcontentprovider的優(yōu)點(diǎn):屏蔽了內(nèi)部數(shù)據(jù)的存儲(chǔ)細(xì)節(jié),向外提供l了上述統(tǒng)一的接口模型53broadcastreceiverbroadcastreceiver簡(jiǎn)介簡(jiǎn)介lbroadcastreceiver的作用:每個(gè)broa

28、dcast receiver都可以接收一種或若干種intent作為觸發(fā)事件lbroadcastreceiver不執(zhí)行任何任務(wù),僅僅是接受并響應(yīng)廣播通知的一類組件。lbroadcastreceiver 不包含任何用戶界面54基礎(chǔ)uimenu:如何打造友好的菜單如何打造友好的菜單listview:用好列表,做好程序用好列表,做好程序dialog:人機(jī)友好互動(dòng)交流人機(jī)友好互動(dòng)交流toast和和notification:溫馨的提醒溫馨的提醒55android的菜單menumenu負(fù)責(zé)管理負(fù)責(zé)管理menuitem添加一個(gè)添加一個(gè)menuitemadd (int groupid, int itemid,

29、intorder, charsequence title)刪除所有的刪除所有的menuitemclear()menuitem一個(gè)菜單的條目一個(gè)菜單的條目常用的方法常用的方法:settitleseticongetitemid()56android的菜單menu1.) 通過(guò)代碼創(chuàng)建通過(guò)代碼創(chuàng)建menupublic boolean oncreateoptionsmenu(menu menu) / 分組分組id,item的的id,順序,名字,順序,名字menu.add(0, m_fback, 0, 反饋反饋).setalphabeticshortcut(f);menu.add(0, m_help, 1

30、, 幫助幫助).setalphabeticshortcut(h).seticon(android.r.drawable.ic_menu_help);return true;57android的菜單menu2.) 通過(guò)通過(guò)xml創(chuàng)建創(chuàng)建menu在在android工程的工程的res/目錄下新增一個(gè)目錄下新增一個(gè)menu/子目錄,然后建立子目錄,然后建立option_menu.xml文件文件oncreateoptionsmenu()方法里通過(guò)方法里通過(guò)menuinflater類引入定義好的菜單文件類引入定義好的菜單文件58option_menu.xml文件option_menu.xml文件文件59

31、public boolean oncreateoptionsmenu(menu menu) menuinflater inflater = getmenuinflater(); inflater.inflate(r.menu.option_menu, menu); return true; 6061android 的對(duì)話框 dialog生成生成alertdialog三步走三步走生成一個(gè)生成一個(gè)alertdialog的構(gòu)造者的構(gòu)造者alertdialog.builderalertdialog.builder builder = new alertdialog.builder(context);設(shè)

32、置屬性,包括標(biāo)題、按鈕和圖標(biāo)設(shè)置屬性,包括標(biāo)題、按鈕和圖標(biāo)builder.seticon();builder.settitle();builder.setpositivebutton();builder.setnegativebutton();最后生成最后生成alertdialogbuilder.create();62提醒 toasttoast是是android提供的輕量級(jí)的提醒機(jī)制提供的輕量級(jí)的提醒機(jī)制toast永遠(yuǎn)不會(huì)獲得聚焦不會(huì)打斷用戶當(dāng)前的操作永遠(yuǎn)不會(huì)獲得聚焦不會(huì)打斷用戶當(dāng)前的操作信息在信息在floating view呈現(xiàn),然后會(huì)自動(dòng)消失呈現(xiàn),然后會(huì)自動(dòng)消失63如何創(chuàng)建如何創(chuàng)建toas

33、t1.)簡(jiǎn)單文字信息簡(jiǎn)單文字信息通過(guò)通過(guò)make()方法創(chuàng)建方法創(chuàng)建toast信息信息調(diào)用調(diào)用show()方法來(lái)顯示方法來(lái)顯示toast提示信息提示信息2.)復(fù)雜復(fù)雜toast信息信息toast支持通過(guò)支持通過(guò)setview(view)添加添加view組件組件64android ui組件65常用常用ui組件組件66自動(dòng)文本和選擇組件67日期和時(shí)間選擇器68girdview gallery imageswitcher69ratingbar progressbar70activity之間的跳轉(zhuǎn)intent intent = new intent();intent.setclass(mainacti

34、vity.this, spinneractivity.class);startactivity(intent);71intent727374action75data76category7778798081編寫(xiě)電話撥號(hào)程序 if(phonenumberutils.isglobalphonenumber(t01.gettext().tostring()intent t=new intent(intent.action_call,uri.parse(tel:/+t01.gettext().tostring();calltel.this.startactivity(t); else toast.mak

35、etext(calltel.this, 呼叫電話錯(cuò)誤呼叫電話錯(cuò)誤, toast.length_long).show();82 83android 系統(tǒng)標(biāo)準(zhǔn)action84intent 跟pendingintent 間的聯(lián)系intent英文意思是意圖,pending表示即將發(fā)生或來(lái)臨的事情。 pendingintent這個(gè)類用于處理即將發(fā)生的事情。比如在通知notification中用于跳轉(zhuǎn)頁(yè)面,但不是馬上跳轉(zhuǎn)。 intent 是及時(shí)啟動(dòng),intent 隨所在的activity 消失而消失。 pendingintent 可以看作是對(duì)intent的包裝,通常通過(guò)getactivity,getbro

36、adcast ,getservice來(lái)得到pendingintent的實(shí)例,當(dāng)前activity并不能馬上啟動(dòng)它所包含的intent,而是在外部執(zhí)行 pendingintent時(shí),調(diào)用intent的。正由于pendingintent中 保存有當(dāng)前app的context,使它賦予外部app一種能力,使得外部app可以如同當(dāng)前app一樣的執(zhí)行pendingintent里的 intent, 就算在執(zhí)行時(shí)當(dāng)前app已經(jīng)不存在了,也能通過(guò)存在pendingintent里的context照樣執(zhí)行intent。另外還可以處理85intent 跟pendingintent 間的聯(lián)系 intent執(zhí)行后的操作。

37、常和alermanger 和notificationmanager一起使用。 intent一般是用作activity、sercvice、broadcastreceiver之間傳遞數(shù)據(jù),而pendingintent,一般用在 notification上,可以理解為延遲執(zhí)行的intent,pendingintent是對(duì)intent一個(gè)包裝。 86broadcastreceiver broadcastreceiver的作用 broadcastreceiver的類別 broadcastreceiver的工作流程87broadcastreceiver 的作用作用:接收由sendbroadcast()或者

38、sendorderedbroadcast發(fā)送的intent 88broadcastreceiver的類別l sendbroadcast :稱為normal broadcast,所有關(guān)注該消息的receiver,都有機(jī)會(huì)獲得并進(jìn)行處理 l sendorderedbroadcast 稱作ordered broadcasts,顧名思義,接受者需要按資排輩,排在后面的只能吃前面吃剩下的,前面的心情不好私吞了,后面的只能喝西北風(fēng)了(有可能拿不到)。89android系統(tǒng)標(biāo)準(zhǔn)broadcast90service service 的定義 如何使用service service 的生命周期91service

39、的定義 運(yùn)行在后臺(tái) 可以活在自己進(jìn)程或者其他應(yīng)用程序的上下文(context)里面 默認(rèn)情況下仍然是活在主線程的,所以耗時(shí)操作要起線程來(lái)處理92如何使用service 通過(guò)context.startservice()啟動(dòng), ontext.stopservice結(jié)束:(1)生成-開(kāi)始(oncreate-onstart) 過(guò)程(2)service停止的時(shí)候進(jìn)入(ondestroy) 過(guò)程(3)如果調(diào)用者退出不調(diào)用stopservie,服務(wù)還會(huì)活著93如何使用service 通過(guò)context.bindservice啟動(dòng)(1)只運(yùn)行oncreate,調(diào)用context.unbindservice()

40、結(jié)束(2) 可以通過(guò)serviceconnection訪問(wèn)service(3)調(diào)用者退出,service則調(diào)用onunbind (4)可以實(shí)現(xiàn)ipc 94service 的生命周期 調(diào)用startservice的生命周期為:oncreate - onstart(可多次調(diào)用) - ondestroy 調(diào)用bindservice的生命周期為:oncreate - onbind(只一次,不可多次綁定) - onunbind - ondestory 95service 的生命周期 96文件操作preferencessqlite庫(kù)存儲(chǔ)庫(kù)存儲(chǔ)網(wǎng)絡(luò)網(wǎng)絡(luò)content providerandroid中的數(shù)據(jù)保

41、存中的數(shù)據(jù)保存97文件操作openfileinputopenfileoutput 讀取資源文件getresource().openrawresource(r.raw.xxx)98preferences輕量級(jí)的保存的是原始數(shù)據(jù)類型常用于保存程序配置信息 sharedpreferences settings = getsharedpreferences(setting_infos, 0);string name = settings.getstring(name, );string password = settings.getstring(password, );99過(guò)context.getsh

42、aredpreferences()得到一個(gè)sharedpreferences。獲取一個(gè)editor,對(duì)保存的參數(shù)進(jìn)行編輯:commit(),進(jìn)行提交。sharedpreferences settings = getsharedpreferences(“info”, 0);editor editor = settings.edit();editor.putstring(“name”, nameedittext.gettext().tostring().putstring(“pwd”, passwordedittext.gettext().tostring().commit();100androi

43、d-使用嵌入式sqliteandroid平臺(tái)上集成的一個(gè)嵌入式關(guān)系型數(shù)據(jù)庫(kù),sqlite3支持 null,integer,real(浮點(diǎn)數(shù)字),text(字符串文本)和blob(二進(jìn)制對(duì)象)數(shù)據(jù)類型,雖然它支持的類型只有五種,但實(shí)際上sqlite3也接受varchar(n),char(n),decimal(p,s) 等數(shù)據(jù)類型,只不過(guò)在運(yùn)算或保存時(shí)會(huì)轉(zhuǎn)成對(duì)應(yīng)的五種數(shù)據(jù)類型.sqlite最大的特點(diǎn)是你可以把各種類型的數(shù)據(jù)保存到任何字段中,而不用關(guān)心字段聲明的數(shù)據(jù)類型是什么. 但定義為integer primary key的字段只能存儲(chǔ)64位整數(shù), 當(dāng)向這種字段保存除整數(shù)以外的數(shù)據(jù)時(shí),將會(huì)產(chǎn)生錯(cuò)誤

44、.另外, sqlite在解析create table語(yǔ)句時(shí),會(huì)忽略字段名后面的數(shù)據(jù)類型信息.sqlite可以解析大部分標(biāo)準(zhǔn)sql語(yǔ)句,如:查詢語(yǔ)句:select * from . where group by .having . order by 排序子句sqlite分頁(yè)同mysql相同:. limit 5 offset 3 | limit 3,5101android-使用嵌入式sqlite首次使用數(shù)據(jù)庫(kù)需要?jiǎng)?chuàng)建表及初始化一些信息,升級(jí)時(shí)需要修改表信,android提供了抽象類sqliteopenhelper完成此類功能.oncreate(sqlitedatabase db)方法用于首次使用時(shí)

45、創(chuàng)建庫(kù),onupgrade(sqlitedatabase db, int oldversion, int ewversion)方法檢測(cè)版本發(fā)生變化時(shí)更新庫(kù).getwritabledatabase()和getreadabledatabase()方法均獲取一個(gè)用于操作數(shù)據(jù)庫(kù)的sqlitedatabase實(shí)例.getwritabledatabase()方法以讀寫(xiě)方式打開(kāi)數(shù)據(jù)庫(kù),一旦數(shù)據(jù)庫(kù)的磁盤空間滿了,數(shù)據(jù)庫(kù)就只能讀而不能寫(xiě).倘若使用getwritabledatabase()打開(kāi)數(shù)據(jù)庫(kù)就會(huì)出錯(cuò).getreadabledatabase()方法先以讀寫(xiě)方式打開(kāi)數(shù)據(jù)庫(kù),如果數(shù)據(jù)庫(kù)的磁盤空間滿了,就會(huì)打開(kāi)失

46、敗,當(dāng)打開(kāi)失敗后會(huì)繼續(xù)嘗試以只讀方式打開(kāi)數(shù)據(jù)庫(kù).102android-使用嵌入式sqlitepublic class databasehelper extends sqliteopenhelper private static final string name = “l(fā)g; /數(shù)據(jù)庫(kù)名稱private static final int version = 1; /數(shù)據(jù)庫(kù)版本public databasehelper(context context) super(context, name, null, version); public void oncreate(sqlitedatabase

47、 db) db.execsql(create table if not exists person (personid integer primary key autoincrement, name varchar(20), age integer); public void onupgrade(sqlitedatabase db,int oldversion,intnewversion)db.execsql( alter table person add phone varchar(12) null );103android-使用嵌入式sqlite使用sqlitedatabase數(shù)據(jù)庫(kù)sql

48、itedatabase db = .;db.execsql(insert into person(name,age) values(?,?),new object.); db.close();/查詢操作cursor cursor = db.rawquery(select * from person, null);while (cursor.movetonext() int personid = cursor.getint(0); string name = cursor.getstring(1);int age = cursor.getint(2);cursor.close();db.clos

49、e();sqlitedatabase db = databasehelper.getwritabledatabase();contentvalues values = new contentvalues();values.put(“name”, “亞嵌教育);.long rowid = db.insert(person, null, values);/104android-使用嵌入式sqlite/刪除sqlitedatabase db = databasehelper.getwritabledatabase();db.delete(person, personid?, new string2)

50、;db.close();/更新sqlitedatabase db = databasehelper.getwritabledatabase();contentvalues values = new contentvalues();/key為字段名,value為值values.put(“name”, “亞嵌教育);db.update(person,values,personid=?,new string1); db.close();注注:第一次調(diào)用getwritabledatabase()或getreadabledatabase()方法后,sqliteopenhelper會(huì)緩存當(dāng)前的sqlite

51、database實(shí)例,sqlitedatabase實(shí)例正常情況下會(huì)維持?jǐn)?shù)據(jù)庫(kù)的打開(kāi)狀態(tài),所以在你不再需要sqlitedatabase實(shí)例時(shí),請(qǐng)及時(shí)調(diào)用close()方法釋放資源.一旦sqlitedatabase實(shí)例被緩存,多次調(diào)用getwritabledatabase()或getreadabledatabase()方法得到的都是同一實(shí)例.105android-單元測(cè)試 .public class xmltest extends androidtestcase public void testsomething() throws throwable log.i(test, this is tes

52、t 日志);system.out.println(ddd);assert.asserttrue(1 + 1 = 3);android-sqlite3工具使用cmd cd ./toolsadb shell#sqlite3 data/data/cn.lg.android/databases/android sqlite.tables | .schemas | .help |.exit(.quit) | select *.nullvalue null/空值數(shù)據(jù)顯示問(wèn)題 例:.nullvlaue null.header(s) on|off/是否顯示列頭信息 例:.headers on .mode mo

53、de ?table?/指定數(shù)據(jù)顯示風(fēng)格 例:.mode column創(chuàng)建表時(shí),只能用integer類型,不能用int作為主鍵,否則不支持autoincrement.create table customers(id integer primary key autoincrement,name text);107android-sqlite3工具使用108android-使用contentprovider使用內(nèi)容供應(yīng)商共享數(shù)據(jù).如果直接訪問(wèn)磁盤文件(sdcard|file|sqlite數(shù)據(jù)庫(kù)|首選項(xiàng)),需要很多底層的交互細(xì)節(jié),但是用該種方式,只使用url即可對(duì)應(yīng)用程序進(jìn)行訪問(wèn),并統(tǒng)一了數(shù)據(jù)訪問(wèn)方

54、式.public class personcontentprovider extends contentproviderpublic boolean oncreate()public uri insert(uri uri, contentvalues values).109android-使用contentprovideruri:content:/viders.personprovider/10scheme:android規(guī)定,必須是content:/authority:惟一標(biāo)識(shí)該供應(yīng)商.path:代表操縱的數(shù)據(jù)./person/person/10/person/10/nam

55、e/將字符串轉(zhuǎn)換成uri對(duì)象uri uri = uri.parse(content:/xxxx/person/10);110android-使用contentproviderurimatcher:使用該類,可以判斷uri如何哪一種模式./若不匹配,返回urimatcher.no_matchurimatcher smatcher = new urimatcher(urimatcher.no_match);/一次添加匹配的模式串,以及匹配后返回的數(shù)值./$authority $pathsmatcher.adduri(cn.lg.contentprovider, person, 1);smatche

56、r.adduri(cn.lg.contentprovider ,person/#,2);switch(smatcher.match(uri)case 1:case 2:./獲取uri后邊id部分的話,可以通過(guò)uri uri = uri.parse(content:/vider.personprovider/person)uri resulturi = contenturis.withappendedid(uri, 10);/.person/10uri.parse(content:/vider.personprovider/person/10)long per

57、sonid = contenturis.parseid(uri);111android-使用contentproviderxxxcontentprovider extends contentprovider./該方法用于返回當(dāng)前url所代表數(shù)據(jù)的mime類型.如果操作的數(shù)據(jù)屬于集合類型,/那么mime類型字符串應(yīng)該以vnd.android.cursor.dir/開(kāi)頭 /如:vnd.android.cursor.dir/person./如果要操作的數(shù)據(jù)屬于非集合類型數(shù)據(jù),那么mime類型字符串應(yīng)該以/vnd.android.cursor.item/開(kāi)頭/如:vnd.android.cursor.

58、item/personpublic string gettype(uri uri).112android-使用contentprovider使用內(nèi)容解析器(contentresolver):contentresolver resolver = getcontentresolver();uri uri = uri.parse(content:/vider.personprovider/person);contentvalues values = new contentvalues();values.put(name, lg);values.put(age, 25);/插入res

59、olver.insert(uri, values);/查詢r(jià)esolver.query(uri, null, null, null, personid desc);/更新resolver.update(updateiduri, updatevalues, null, null);/刪除resolver.delete(deleteiduri, null, null);113android-使用contentprovider監(jiān)聽(tīng)contentprovider的數(shù)據(jù)變化./供應(yīng)商中的crud方法完成后需要發(fā)出數(shù)據(jù)變更的通知,以通知那些感興趣的監(jiān)聽(tīng)者.xxxcontentprovider extend

60、s contentproviderpublic long insert(.).getcontext().getcontentresolver().notifychange(uri,null);內(nèi)容解析器如若要對(duì)數(shù)據(jù)監(jiān)聽(tīng)數(shù)據(jù)變更,需要使用contentobserver對(duì)uri進(jìn)行監(jiān)聽(tīng),收到通知后,回調(diào)處理方法onchange().context.getcontentresolver().registercontentobserver(uri,true, new mycontentobserver(new handler();class mycontentobserver exnteds cont

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論