Android開發(fā)基本流程介紹.ppt_第1頁
Android開發(fā)基本流程介紹.ppt_第2頁
Android開發(fā)基本流程介紹.ppt_第3頁
Android開發(fā)基本流程介紹.ppt_第4頁
Android開發(fā)基本流程介紹.ppt_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Android平臺開發(fā)簡介 平臺介紹及開發(fā)基本流程 2011 4月 什么是Android Android是Google在2007年11月5日推出的開源手機(jī)操作系統(tǒng) 目前Android在中國的發(fā)展是非?;鸬?為了節(jié)省研發(fā)費用 國內(nèi)很多的手機(jī)廠商和移動運營商紛紛加入到了android陣營 其中包括中國移動 中國聯(lián)通 中國電信 華為 聯(lián)想等大企業(yè) 在中國不管是知名的手機(jī)生產(chǎn)廠商還是山寨手機(jī)廠商 都已經(jīng)開始生產(chǎn)Android操作系統(tǒng)的手機(jī) 另外android應(yīng)用的范圍不僅僅在手機(jī) 還被應(yīng)用在汽車 平板電腦 和智能上網(wǎng)設(shè)備上 聽說國外已經(jīng)有了安裝有Android系統(tǒng) 并且能夠上網(wǎng)的智能電飯煲 用戶在千里之外就可以操作電飯煲進(jìn)行煮飯 由于大家大多使用的手機(jī)都屬傻瓜手機(jī) 也就是打打電話 發(fā)發(fā)短信 從今天開始 大家就應(yīng)該改變這個觀念了 你們需要把智能手機(jī)看作是一臺電腦 它能完成電腦所能完成的一切 所以你可以像在電腦一樣 在智能手機(jī)上安裝軟件 以滿足你工作和生活的需要 如何安裝AndroidSDK和Eclipse插件 所需開發(fā)環(huán)境 JDK5或以上版本 僅有JRE不夠 Eclipse3 4或以上版本 推薦使用 伽利略 版 下載用于在Eclipse開發(fā)android應(yīng)用的ADT插件在企業(yè)開發(fā)中 很多程序員使用EclipseIDE作為應(yīng)用的開發(fā)環(huán)境 為了使得Android應(yīng)用的創(chuàng)建 運行和調(diào)試更加方便快捷 Android的開發(fā)團(tuán)隊專門針對EclipseIDE定制了一個插件 AndroidDevelopmentTools ADT 下載地址 開發(fā)第一個Android應(yīng)用 打開Eclipse 新建項目 點擊File New Project 在項目列表中展開Android目錄 選擇AndroidProject 如下圖 開發(fā)第一個Android應(yīng)用 開發(fā)第一個Android應(yīng)用 點擊 finish 即可完成項目的創(chuàng)建 創(chuàng)建后的項目已經(jīng)是一個可運行的Android應(yīng)用 我們可以通過下面方式運行此應(yīng)用 點擊工具欄上機(jī)器人形狀的虛擬設(shè)備管理器 簡稱 AVD 如下 開發(fā)第一個Android應(yīng)用 尚未注冊網(wǎng)絡(luò) 錯誤信息的解決辦法 打開Android模擬器時 出現(xiàn)無信號 拔打電話或發(fā)短信時 提示 尚未注冊網(wǎng)絡(luò) 錯誤信息的解決方案如下 場景一 你的電腦沒有連接上互聯(lián)網(wǎng) 同時也沒有在局域網(wǎng) 解決辦法 右鍵點擊網(wǎng)上鄰居 選擇 屬性 在網(wǎng)絡(luò)連接窗口中右鍵點擊 本地連接 選擇 屬性 設(shè)置TCP IP屬性如下 IP地址 192 168 1 100子網(wǎng)掩碼 255 255 255 0默認(rèn)網(wǎng)關(guān) 192 168 1 100首選DNS服務(wù)器 192 168 1 100場景二 你的電腦沒有連接上互聯(lián)網(wǎng) 但在局域網(wǎng) 解決辦法 右鍵點擊網(wǎng)上鄰居 選擇 屬性 在網(wǎng)絡(luò)連接窗口中右鍵點擊 本地連接 選擇 屬性 設(shè)置TCP IP屬性如下 IP地址 設(shè)置成你所在局域網(wǎng)的IP 如 192 168 1 100子網(wǎng)掩碼 設(shè)置成你所在局域網(wǎng)的掩碼 如 255 255 255 0默認(rèn)網(wǎng)關(guān) 設(shè)置成你所在局域網(wǎng)的網(wǎng)關(guān) 一般網(wǎng)關(guān)的IP格式為 1 如 192 168 1 1首選DNS服務(wù)器 設(shè)置成你所在局域網(wǎng)的路由器IP 一般路由器的IP格式為 1 如 192 168 1 1最后一種解決方案是 讓你的電腦連接上互聯(lián)網(wǎng) 開發(fā)第一個Android應(yīng)用 在項目上右鍵點擊runas Androidapplication 如下圖 Android應(yīng)用程序架構(gòu) src java原代碼存放目錄gen 自動生成目錄gen目錄中存放所有由Android開發(fā)工具自動生成的文件 目錄中最重要的就是R java文件 這個文件由Android開發(fā)工具自動產(chǎn)生的 Android開發(fā)工具會自動根據(jù)你放入res目錄的xml界面文件 圖標(biāo)與常量 同步更新修改R java文件 正因為R java文件是由開發(fā)工具自動生成的 所以我們應(yīng)避免手工修改R java R java在應(yīng)用中起到了字典的作用 它包含了界面 圖標(biāo) 常量等各種資源的id 通過R java 應(yīng)用可以很方便地找到對應(yīng)資源 另外編繹器也會檢查R java列表中的資源是否被使用到 沒有被使用到的資源不會編繹進(jìn)軟件中 這樣可以減少應(yīng)用在手機(jī)占用的空間 res 資源 Resource 目錄在這個目錄中我們可以存放應(yīng)用使用到的各種資源 如xml界面文件 圖片或數(shù)據(jù) assets資源目錄Android除了提供 res目錄存放資源文件外 在 assets目錄也可以存放資源文件 而且 assets目錄下的資源文件不會在R java自動生成ID 所以讀取 assets目錄下的文件必須指定文件的路徑 如 file android asset xxx 3gpAndroidManifest xml項目清單文件這個文件列出了應(yīng)用程序所提供的功能 以后你開發(fā)好的各種組件需要在該文件中進(jìn)行配置 如果應(yīng)用使用到了系統(tǒng)內(nèi)置的應(yīng)用 如電話服務(wù) 互聯(lián)網(wǎng)服務(wù) 短信服務(wù) GPS服務(wù)等等 你還需在該文件中聲明使用權(quán)限 default properties項目環(huán)境信息 一般是不需要修改此文件 Android中的顯示單位 px pixels 像素一般HVGA代表320 x480像素 這個用的比較多 dip或dp deviceindependentpixels 設(shè)備獨立像素這個和設(shè)備硬件有關(guān) 一般為了支持WVGA HVGA和QVGA推薦使用這個 不依賴像素 sp scaledpixels bestfortextsize 比例像素主要處理字體的大小 可以根據(jù)系統(tǒng)的字體自適應(yīng) 除了上面三個顯示單位 下面還有幾個不太常用 in inches 英寸mm millimeters 毫米pt points 點 1 72英寸為了適應(yīng)不同分辨率 不同的像素密度 推薦使用dip 文字使用sp Android開發(fā)平臺是開放的平臺 而位于四層框架頂端的應(yīng)用開發(fā) 必然涉及到Android組件 本文將為大家詳細(xì)介紹Android組件 組件 Component 在談及所謂架構(gòu)和重用的時候 是一個重要的事情 很多時候都會說基于組件的軟件架構(gòu) 指的是期望把程序做樂高似的 有一堆接口標(biāo)準(zhǔn)封裝完整的組件放在哪里 想用的時候取上幾個一搭配 整個程序就構(gòu)建完成了 在開篇的時候就在說 Android是一個為組件化而搭建的平臺 它引入所謂Mash Up的概念 這使得你在應(yīng)用的最上層 想做的不組件化都是很困難的一件事 具體說來 Android有四大組件 Activity Service BroadcastReceiver ContentProvider Android四大組建 Activity是為用戶操作而展示的可視化用戶界面 比如說 一個activity可以展示一個菜單項列表供用戶選擇 或者顯示一些包含說明的照片 一個短消息應(yīng)用程序可以包括一個用于顯示做為發(fā)送對象的聯(lián)系人的列表的activity 一個給選定的聯(lián)系人寫短信的activity以及翻閱以前的短信和改變設(shè)置的activity 盡管它們一起組成了一個內(nèi)聚的用戶界面 但其中每個activity都與其它的保持獨立 每個都是以Activity類為基類的子類實現(xiàn) 一個應(yīng)用程序可以只有一個activity 或者 如剛才提到的短信應(yīng)用程序那樣 包含很多個 每個activity的作用 以及其數(shù)目 自然取決于應(yīng)用程序及其設(shè)計 一般情況下 總有一個應(yīng)用程序被標(biāo)記為用戶在應(yīng)用程序啟動的時候第一個看到的 從一個activity轉(zhuǎn)向另一個的方式是靠當(dāng)前的activity啟動下一個 每個activity都被給予一個默認(rèn)的窗口以進(jìn)行繪制 一般情況下 這個窗口是滿屏的 但它也可以是一個小的位于其它窗口之上的浮動窗口 一個activity也可以使用超過一個的窗口 比如 在activity運行過程中彈出的一個供用戶反應(yīng)的小對話框 或是當(dāng)用戶選擇了屏幕上特定項目后顯示的必要信息 窗口顯示的可視內(nèi)容是由一系列視圖構(gòu)成的 這些視圖均繼承自View基類 每個視圖均控制著窗口中一塊特定的矩形空間 父級視圖包含并組織它子視圖的布局 葉節(jié)點視圖 位于視圖層次最底端 在它們控制的矩形中進(jìn)行繪制 并對用戶對其直接操作做出響應(yīng) 所以 視圖是activity與用戶進(jìn)行交互的界面 比如說 視圖可以顯示一個小圖片 并在用戶指點它的時候產(chǎn)生動作 Android有很多既定的視圖供用戶直接使用 包括按鈕 文本域 卷軸 菜單項 復(fù)選框等等 Activity活動 服務(wù)沒有可視化的用戶界面 而是在一段時間內(nèi)在后臺運行 比如說 一個服務(wù)可以在用戶做其它事情的時候在后臺播放背景音樂 從網(wǎng)絡(luò)上獲取一些數(shù)據(jù)或者計算一些東西并提供給需要這個運算結(jié)果的activity使用 每個服務(wù)都繼承自Service基類 一個媒體播放器播放播放列表中的曲目是一個不錯的例子 播放器應(yīng)用程序可能有一個或多個activity來給用戶選擇歌曲并進(jìn)行播放 然而 音樂播放這個任務(wù)本身不應(yīng)該為任何activity所處理 因為用戶期望在他們離開播放器應(yīng)用程序而開始做別的事情時 音樂仍在繼續(xù)播放 為達(dá)到這個目的 媒體播放器activity應(yīng)該啟用一個運行于后臺的服務(wù) 而系統(tǒng)將在這個activity不再顯示于屏幕之后 仍維持音樂播放服務(wù)的運行 你可以連接至 綁定 一個正在運行的服務(wù) 如果服務(wù)沒有運行 則啟動之 連接之后 你可以通過那個服務(wù)暴露出來的接口與服務(wù)進(jìn)行通訊 對于音樂服務(wù)來說 這個接口可以允許用戶暫停 回退 停止以及重新開始播放 如同activity和其它組件一樣 服務(wù)運行于應(yīng)用程序進(jìn)程的主線程內(nèi) 所以它不會對其它組件或用戶界面有任何干擾 它們一般會派生一個新線程來進(jìn)行一些耗時任務(wù) 比如音樂回放 Service服務(wù)和接收器 廣播接收器是一個專注于接收廣播通知信息 并做出對應(yīng)處理的組件 很多廣播是源自于系統(tǒng)代碼的 比如 通知時區(qū)改變 電池電量低 拍攝了一張照片或者用戶改變了語言選項 應(yīng)用程序也可以進(jìn)行廣播 比如說 通知其它應(yīng)用程序一些數(shù)據(jù)下載完成并處于可用狀態(tài) 應(yīng)用程序可以擁有任意數(shù)量的廣播接收器以對所有它感興趣的通知信息予以響應(yīng) 所有的接收器均繼承自BroadcastReceiver基類 廣播接收器沒有用戶界面 然而 它們可以啟動一個activity來響應(yīng)它們收到的信息 或者用NotificationManager來通知用戶 通知可以用很多種方式來吸引用戶的注意力 閃動背燈 震動 播放聲音等等 一般來說是在狀態(tài)欄上放一個持久的圖標(biāo) 用戶可以打開它并獲取消息 BroadcastReceiver接收器 內(nèi)容提供者將一些特定的應(yīng)用程序數(shù)據(jù)供給其它應(yīng)用程序使用 數(shù)據(jù)可以存儲于文件系統(tǒng) SQLite數(shù)據(jù)庫或其它方式 內(nèi)容提供者繼承于ContentProvider基類 為其它應(yīng)用程序取用和存儲它管理的數(shù)據(jù)實現(xiàn)了一套標(biāo)準(zhǔn)方法 然而 應(yīng)用程序并不直接調(diào)用這些方法 而是使用一個ContentResolver對象 調(diào)用它的方法作為替代 ContentResolver可以與任意內(nèi)容提供者進(jìn)行會話 與其合作來對所有相關(guān)交互通訊進(jìn)行管理 參閱獨立的內(nèi)容提供者章節(jié)獲得更多關(guān)于使用內(nèi)容提供者的內(nèi)容 每當(dāng)出現(xiàn)一個需要被特定組件處理的請求時 Android會確保那個組件的應(yīng)用程序進(jìn)程處于運行狀態(tài) 或在必要的時候啟動它 并確保那個相應(yīng)組件的實例的存在 必要時會創(chuàng)建那個實例 ContentProvider 當(dāng)接收到ContentResolver發(fā)出的請求后 內(nèi)容提供者被激活 而其它三種組件 activity 服務(wù)和廣播接收器被一種叫做intent的異步消息所激活 intent是一個保存著消息內(nèi)容的Intent對象 對于activity和服務(wù)來說 它指明了請求的操作名稱以及作為操作對象的數(shù)據(jù)的URI和其它一些信息 比如說 它可以承載對一個activity的請求 讓它為用戶顯示一張圖片 或者讓用戶編輯一些文本 而對于廣播接收器而言 Intent對象指明了聲明的行為 比如 它可以對所有感興趣的對象聲明照相按鈕被按下 對于每種組件來說 激活的方法是不同的 通過傳遞一個Intent對象至Context startActivity 或Activity startActivityForResult 以載入 或指定新工作給 一個activity 相應(yīng)的activity可以通過調(diào)用getIntent 方法來查看激活它的intent Android通過調(diào)用activity的onNewIntent 方法來傳遞給它繼發(fā)的intent 一個activity經(jīng)常啟動了下一個 如果它期望它所啟動的那個activity返回一個結(jié)果 它會以調(diào)用startActivityForResult 來取代startActivity 比如說 如果它啟動了另外一個activity以使用戶挑選一張照片 它也許想知道哪張照片被選中了 結(jié)果將會被封裝在一個Intent對象中 并傳遞給發(fā)出調(diào)用的activity的onActivityResult 方法 組件的連接者 Intent 通過傳遞一個Intent對象至Context startService 將啟動一個服務(wù) 或給予正在運行的服務(wù)以一個新的指令 Android調(diào)用服務(wù)的onStart 方法并將Intent對象傳遞給它 與此類似 一個Intent可以被調(diào)用組件傳遞給Context bindService 以獲取一個正在運行的目標(biāo)服務(wù)的連接 這個服務(wù)會經(jīng)由onBind 方法的調(diào)用獲取這個Intent對象 如果服務(wù)尚未啟動 bindService 會先啟動它 比如說 一個activity可以連接至前述的音樂回放服務(wù) 并提供給用戶一個可操作的 用戶界面 以對回放進(jìn)行控制 這個activity可以調(diào)用bindService 來建立連接 然后調(diào)用服務(wù)中定義的對象來影響回放 應(yīng)用程序可以憑借將Intent對象傳遞給Context sendBroadcast Context sendOrderedBroadcast 以及Context sendStickyBroadcast 和其它類似方法來產(chǎn)生一個廣播 Android會調(diào)用所有對此廣播有興趣的廣播接收器的onReceive 方法 將intent傳遞給它們 Manifest文件 當(dāng)Android啟動一個應(yīng)用程序組件之前 它必須知道那個組件是存在的 所以 應(yīng)用程序會在一個manifest文件中聲明它的組件 這個文件會被打包到Android包中 這個 apk文件還將涵括應(yīng)用程序的代碼 文件以及其它資源 這個manifest文件以XML作為結(jié)構(gòu)格式 而且對于所有應(yīng)用程序 都叫做AndroidManifest xml 為聲明一個應(yīng)用程序組件 它還會做很多額外工作 比如指明應(yīng)用程序所需鏈接到的庫的名稱 除了默認(rèn)的Android庫之外 以及聲明應(yīng)用程序期望獲得的各種權(quán)限 但manifest文件的主要功能仍然是向Android聲明應(yīng)用程序的組件 舉例說明 一個activity可以如下聲明 元素的name屬性指定了實現(xiàn)了這個activity的Activity的子類 icon和label屬性指向了包含展示給用戶的此activity的圖標(biāo)和標(biāo)簽的資源文件 其它組件也以類似的方法聲明 元素用于聲明服務(wù) 元素用于聲明廣播接收器 而元素用于聲明內(nèi)容提供者 manifest文件中未進(jìn)行聲明的activity 服務(wù)以及內(nèi)容提供者將不為系統(tǒng)所見 從而也就不會被運行 然而 廣播接收器既可以在manifest文件中聲明 也可以在代碼中進(jìn)行動態(tài)的創(chuàng)建 并以調(diào)用Context registerReceiver 的方式注冊至系統(tǒng) 如前所述 一個activity可以啟動另外一個 甚至包括與它不處于同一應(yīng)用程序之中的 舉個例子說 假設(shè)你想讓用戶看到某個地方的街道地圖 而已經(jīng)存在一個具有此功能的activity了 那么你的activity所需要做的工作就是把請求信息放到一個Intent對象里面 并把它傳遞給startActivity 于是地圖瀏覽器就會顯示那個地圖 而當(dāng)用戶按下BACK鍵的時候 你的activity又會再一次的顯示在屏幕上 對于用戶來說 這看起來就像是地圖瀏覽器是你activity所在的應(yīng)用程序中的一個組成部分 其實它是在另外一個應(yīng)用程序中定義 并運行在那個應(yīng)用程序的進(jìn)程之中的 Android將這兩個activity放在同一個任務(wù)中來維持一個完整的用戶體驗 簡單的說 任務(wù)就是用戶所體驗到的 應(yīng)用程序 它是安排在一個堆棧中的一組相關(guān)的activity 堆棧中的根activity就是啟動了這整個任務(wù)的那個 一般情況下 它就是用戶在應(yīng)用程序加載器中所選擇的 而堆棧最上方的activity則是當(dāng)前運行的 用戶直接對其進(jìn)行操作的 當(dāng)一個activity啟動另外一個的時候 新的activity就被壓入堆棧 并成為當(dāng)前運行的activity 而前一個activity仍保持在堆棧之中 當(dāng)用戶按下BACK鍵的時候 當(dāng)前activity出棧 而前一個恢復(fù)為當(dāng)前運行的activity Activity和任務(wù) Activity生命周期 用戶界面UserInterface 在一個Android應(yīng)用中 用戶界面是由View和ViewGroup對象構(gòu)建的 View與ViewGroup都有很多種類 而它們都是View類的子類 ViewView對象是Android平臺中用戶界面體現(xiàn)的基礎(chǔ)單位 View類是它稱為 widgets 工具 的子類的基礎(chǔ) 它們提供了諸如文本輸入框和按鈕之類的UI對象的完整實現(xiàn) ViewGroup類同樣為其被稱為 Layouts 布局 的子類奠定了基礎(chǔ) 它們提供了象流式布局 表格布局以及相對布局之類的布局架構(gòu) View對象是一個數(shù)據(jù)體 它的屬性存儲了用于屏幕上一塊矩形區(qū)域的布局參數(shù)及內(nèi)容 并負(fù)責(zé)這塊它所轄的這個矩形區(qū)域之中所有測量 布局 焦點轉(zhuǎn)換 卷動以及按鍵 觸摸手勢的處理 作為一個用戶界面對象 View同時也擔(dān)任著用戶交互關(guān)鍵點以及交互事件接受者的角色 布局Layout 定義并展現(xiàn)你的視圖層次的最常用的方法是使用XML布局文件 如同HTML一樣 XML為布局提供了一種可讀的結(jié)構(gòu) XML中的每個元素都是View或ViewGroup對象 抑或它們的子類 View對象是樹的葉節(jié)點 而ViewGroup對象是樹的分支 參閱樓上的視圖層次圖 XML元素的名稱與它體現(xiàn)的Java類相對應(yīng) 所以一個元素將在你的UI中生成一個TextView 而則創(chuàng)建一個LinearLayout視圖組 當(dāng)你載入一個布局資源時 Android系統(tǒng)會根據(jù)你布局中的元素初始化這些運行時對象 舉例來說 一個包含文本視圖和一個按鈕的簡單垂直布局如下 請注意 LinearLayout元素包含了TextView和Button對象 你可以在其中另外安置一個LinearLayout 或其它類型的視圖組 以延展這個視圖層次 構(gòu)建更復(fù)雜的布局 用戶界面事件UIEvents 當(dāng)你在用戶界面中加入了一些視圖和工具之后 你可能想要知道如何讓它們與用戶交互 進(jìn)而實現(xiàn)你的動作 如欲獲得用戶界面事件通知 你需要做以下兩件事情之一 定義一個事件偵聽器并將其注冊至視圖 通常情況下 這是你偵聽事件的主要方式 View類包含了一大堆命名類似OnListener的接口 每個都帶有一個叫做On 的回調(diào)方法 比如 View OnClickListener 用以處理視圖中的點擊 View OnTouchListener 用以處理視圖中的觸屏事件 以及View OnKeyListener 用以處理視圖中的設(shè)備按鍵事件 所以 如果你希望你的視圖在它被 點擊 比如選擇了一個按鈕 的時候獲得通知 你就要實現(xiàn)OnClickListener 定義它的onClick 回調(diào)方法 在其中進(jìn)行相應(yīng)處理 并將它用setOnClickListener 方法注冊到視圖上 為視圖覆寫一個現(xiàn)有的回調(diào)方法 這種方法主要用于你自己實現(xiàn)了一個View類 并想偵聽其上發(fā)生的特定事件 比如說當(dāng)屏幕被觸摸 onTouchEvent 當(dāng)軌跡球發(fā)生了移動 onTrackballEvent 或者是設(shè)備上的按鍵被按下 onKeyDown 這種方式允許你為自己定制的視圖中發(fā)生的每個事件定義默認(rèn)的行為 并決定是否需要將事件傳遞給其它的子視圖 再說一次 這些是View類相關(guān)的回調(diào)方法 所以你只能在你構(gòu)建自定義組件時定義它們 如何在視圖中處理用戶交互請參見處理用戶界面事件文檔 資源和資產(chǎn)ResourcesandAssets 資源是Android應(yīng)用程序不可或缺的部分 總體而言 資源是你想包含和引入到應(yīng)用程序里面的一些外部元素 比如圖片 音頻 視頻 文本字符串 布局 主題等 每個Android應(yīng)用程序包含一個資源目錄 res 和資產(chǎn)目錄 assets 資產(chǎn)不經(jīng)常被使用 因為它們的應(yīng)用程序很少 你僅在需要讀取原始字節(jié)流時才需要保存數(shù)據(jù)為資產(chǎn) 資源和資產(chǎn)目錄均駐留在Android項目樹的頂端 和源代碼目錄 src 處在同一級上 資源和資產(chǎn)從表面上看沒多大區(qū)別 不過總體上 在存儲外部內(nèi)容時資源用得更多 真正的區(qū)別在于任何放置在資源目錄里的內(nèi)容可以通過您的應(yīng)用程序的R類訪問 這是被Android編譯過的 而任何存放在資產(chǎn)目錄里的內(nèi)容會保持它的原始文件格式 為了讀取它 你必須使用AssetManager來以字節(jié)流的方式讀取文件 所以保持文件和數(shù)據(jù)在資源中 res 中會更方便訪問 目錄Directory資源類型ResourceTypesres anim XML文件 它們被編譯進(jìn)逐幀動畫 framebyframeanimation 或補(bǔ)間動畫 tweenedanimation 對象res drawable png 9 png jpg文件 它們被編譯進(jìn)以下的Drawable資源子類型中 要獲得這種類型的一個資源 可以使用Resource getDrawable id 位圖文件9 patches 可變尺寸的位圖 為了獲取資源類型 使用mContext getResources getDrawable R drawable imageId 注意 放在這里的圖像資源可能會被aapt工具自動地進(jìn)行無損壓縮優(yōu)化 比如 一個真彩色但并不需要256色的PNG可能會被轉(zhuǎn)換為一個帶調(diào)色板的8位PNG 這使得同等質(zhì)量的圖片占用更少的資源 所以我們得意識到這些放在該目錄下的二進(jìn)制圖像在生成時可能會發(fā)生變化 如果你想讀取一個圖像位流并轉(zhuǎn)換成一個位圖 bitmap 請把圖像文件放在res raw 目錄下 這樣可以避免被自動優(yōu)化 res layout 被編譯為屏幕布局 或屏幕的一部分 的XML文件 參見布局聲明 DeclaringLayout res values 可以被編譯成很多種類型的資源的XML文件 注意 不像其他的res 文件夾 它可以保存任意數(shù)量的文件 這些文件保存了要創(chuàng)建資源的描述 而不是資源本身 XML元素類型控制這些資源應(yīng)該放在R類的什么地方 盡管這個文件夾里的文件可以任意命名 不過下面使一些比較典型的文件 文件命名的慣例是將元素類型包含在該名稱之中 array xml定義數(shù)據(jù)colors xml定義colordrawable和顏色的字符串值 colorstringvalues 使用Resource getDrawable 和Resources getColor 分別獲得這些資源 dimens xml定義尺寸值 dimensionvalue 使用Resources getDimension 獲得這些資源 strings xml定義字符串 string 值 使用Resources getString 或者Resources getText 獲取這些資源 getText 會保留在UI字符串上應(yīng)用的豐富的文本樣式 styles xml定義樣式 style 對象 res xml 任意的XML文件 在運行時可以通過調(diào)用Resources getXML 讀取 res raw 直接復(fù)制到設(shè)備中的任意文件 它們無需編譯 添加到你的應(yīng)用程序編譯產(chǎn)生的壓縮文件中 要使用這些資源 可以調(diào)用Resources openRawResource 參數(shù)是資源的ID 即R raw somefilename 數(shù)據(jù)存儲與訪問 很多時候我們的軟件需要對處理后的數(shù)據(jù)進(jìn)行存儲或再次訪問 Android為數(shù)據(jù)存儲提供了多種方式 分別有如下幾種 文件SharedPreferences 參數(shù) SQLite數(shù)據(jù)庫內(nèi)容提供者 Contentprovider 網(wǎng)絡(luò) 使用文件進(jìn)行數(shù)據(jù)存儲 首先給大家介紹使用文件如何對數(shù)據(jù)進(jìn)行存儲 Activity提供了openFileOutput 方法可以用于把數(shù)據(jù)輸出到文件中 具體的實現(xiàn)過程與在J2SE環(huán)境中保存數(shù)據(jù)到文件中是一樣的 publicclassFileActivityextendsActivity OverridepublicvoidonCreate BundlesavedInstanceState FileOutputStreamoutStream this openFileOutput itcast txt Context MODE PRIVATE outStream write ggggg getBytes outStream close openFileOutput 方法的第一參數(shù)用于指定文件名稱 不能包含路徑分隔符 如果文件不存在 Android會自動創(chuàng)建它 創(chuàng)建的文件保存在 data data files目錄 如 data data cn itcast action files itcast txt 通過點擊Eclipse菜單 Window ShowView Other 在對話窗口中展開android文件夾 選擇下面的FileExplorer視圖 然后在FileExplorer視圖中展開 data data files目錄就可以看到該文件 openFileOutput 方法的第二參數(shù)用于指定操作模式 有四種模式 分別為 Context MODE PRIVATE 0Context MODE APPEND 32768Context MODE WORLD READABLE 1Context MODE WORLD WRITEABLE 2 使用文件進(jìn)行數(shù)據(jù)存儲 Context MODE PRIVATE 為默認(rèn)操作模式 代表該文件是私有數(shù)據(jù) 只能被應(yīng)用本身訪問 在該模式下 寫入的內(nèi)容會覆蓋原文件的內(nèi)容 如果想把新寫入的內(nèi)容追加到原文件中 可以使用Context MODE APPENDContext MODE APPEND 模式會檢查文件是否存在 存在就往文件追加內(nèi)容 否則就創(chuàng)建新文件 Context MODE WORLD READABLE和Context MODE WORLD WRITEABLE用來控制其他應(yīng)用是否有權(quán)限讀寫該文件 MODE WORLD READABLE 表示當(dāng)前文件可以被其他應(yīng)用讀取 MODE WORLD WRITEABLE 表示當(dāng)前文件可以被其他應(yīng)用寫入 如果希望文件被其他應(yīng)用讀和寫 可以傳入 openFileOutput itcast txt Context MODE WORLD READABLE Context MODE WORLD WRITEABLE android有一套自己的安全模型 當(dāng)應(yīng)用程序 apk 在安裝時系統(tǒng)就會分配給他一個userid 當(dāng)該應(yīng)用要去訪問其他資源比如文件的時候 就需要userid匹配 默認(rèn)情況下 任何應(yīng)用創(chuàng)建的文件 sharedpreferences 數(shù)據(jù)庫都應(yīng)該是私有的 位于 data data files 其他程序無法訪問 除非在創(chuàng)建時指定了Context MODE WORLD READABLE或者Context MODE WORLD WRITEABLE 只有這樣其他程序才能正確訪問 使用SharedPreferences進(jìn)行數(shù)據(jù)存儲 很多時候我們開發(fā)的軟件需要向用戶提供軟件參數(shù)設(shè)置功能 例如我們常用的QQ 用戶可以設(shè)置是否允許陌生人添加自己為好友 對于軟件配置參數(shù)的保存 如果是window軟件通常我們會采用ini文件進(jìn)行保存 如果是j2se應(yīng)用 我們會采用properties屬性文件或者xml進(jìn)行保存 如果是Android應(yīng)用 我們最適合采用什么方式保存軟件配置參數(shù)呢 Android平臺給我們提供了一個SharedPreferences類 它是一個輕量級的存儲類 特別適合用于保存軟件配置參數(shù) 使用SharedPreferences保存數(shù)據(jù) 其背后是用xml文件存放數(shù)據(jù) 文件存放在 data data shared prefs目錄下 SharedPreferencessharedPreferences getSharedPreferences itcast Context MODE PRIVATE Editoreditor sharedPreferences edit 獲取編輯器editor putString name 傳智播客 editor putInt age 4 mit 提交修改生成的itcast xml文件內(nèi)容如下 傳智播客因為SharedPreferences背后是使用xml文件保存數(shù)據(jù) getSharedPreferences name mode 方法的第一個參數(shù)用于指定該文件的名稱 名稱不用帶后綴 后綴會由Android自動加上 方法的第二個參數(shù)指定文件的操作模式 共有四種操作模式 這四種模式前面介紹使用文件方式保存數(shù)據(jù)時已經(jīng)講解過 如果希望SharedPreferences背后使用的xml文件能被其他應(yīng)用讀和寫 可以指定Context MODE WORLD READABLE和Context MODE WORLD WRITEABLE權(quán)限 另外Activity還提供了另一個getPreferences mode 方法操作SharedPreferences 這個方法默認(rèn)使用當(dāng)前類不帶包名的類名作為文件的名稱 訪問SharedPreferences中的數(shù)據(jù) 訪問SharedPreferences中的數(shù)據(jù)代碼如下 SharedPreferencessharedPreferences getSharedPreferences itcast Context MODE PRIVATE getString 第二個參數(shù)為缺省值 如果preference中不存在該key 將返回缺省值Stringname sharedPreferences getString name intage sharedPreferences getInt age 1 如果訪問其他應(yīng)用中的Preference 前提條件是 該preference創(chuàng)建時指定了Context MODE WORLD READABLE或者Context MODE WORLD WRITEABLE權(quán)限 如 有個為cn itcast action的應(yīng)用使用下面語句創(chuàng)建了preference getSharedPreferences itcast Context MODE WORLD READABLE 其他應(yīng)用要訪問上面應(yīng)用的preference 首先需要創(chuàng)建上面應(yīng)用的Context 然后通過Context訪問preference 訪問preference時會在應(yīng)用所在包下的shared prefs目錄找到preference ContextotherAppsContext createPackageContext cn itcast action Context CONTEXT IGNORE SECURITY SharedPreferencessharedPreferences otherAppsContext getSharedPreferences itcast Context MODE WORLD READABLE Stringname sharedPreferences getString name intage sharedPreferences getInt age 0 如果不通過創(chuàng)建Context訪問其他應(yīng)用的preference 也可以以讀取xml文件方式直接訪問其他應(yīng)用preference對應(yīng)的xml文件 如 FilexmlFile newFile data data shared prefs itcast xml 應(yīng)替換成應(yīng)用的包名 使用嵌入式關(guān)系型SQLite數(shù)據(jù)庫存儲數(shù)據(jù) 除了可以使用文件或SharedPreferences存儲數(shù)據(jù) 還可以選擇使用SQLite數(shù)據(jù)庫存儲數(shù)據(jù) 在Android平臺上 集成了一個嵌入式關(guān)系型數(shù)據(jù)庫 SQLite SQLite3支持NULL INTEGER REAL 浮點數(shù)字 TEXT 字符串文本 和BLOB 二進(jìn)制對象 數(shù)據(jù)類型 雖然它支持的類型只有五種 但實際上sqlite3也接受varchar n char n decimal p s 等數(shù)據(jù)類型 只不過在運算或保存時會轉(zhuǎn)成對應(yīng)的五種數(shù)據(jù)類型 SQLite最大的特點是你可以把各種類型的數(shù)據(jù)保存到任何字段中 而不用關(guān)心字段聲明的數(shù)據(jù)類型是什么 例如 可以在Integer類型的字段中存放字符串 或者在布爾型字段中存放浮點數(shù) 或者在字符型字段中存放日期型值 但有一種情況例外 定義為INTEGERPRIMARYKEY的字段只能存儲64位整數(shù) 當(dāng)向這種字段保存除整數(shù)以外的數(shù)據(jù)時 將會產(chǎn)生錯誤 另外 SQLite在解析CREATETABLE語句時 會忽略CREATETABLE語句中跟在字段名后面的數(shù)據(jù)類型信息 如下面語句會忽略name字段的類型信息 CREATETABLEperson personidintegerprimarykeyautoincrement namevarchar 20 SQLite可以解析大部分標(biāo)準(zhǔn)SQL語句 如 查詢語句 select from表名where條件子句groupby分組字句having orderby排序子句如 select frompersonselect frompersonorderbyiddescselectnamefrompersongroupbynamehavingcount 1分頁SQL與mysql類似 下面SQL語句獲取5條記錄 跳過前面 3條記錄select fromAccountlimit5offset3或者select fromAccountlimit3 5插入語句 insertinto表名 字段列表 values 值列表 如 insertintoperson name age values 傳智 3 更新語句 update表名set字段名 值where條件子句 如 updatepersonsetname 傳智 whereid 10刪除語句 deletefrom表名where條件子句 如 deletefrompersonwhereid 10 使用SQLiteOpenHelper對數(shù)據(jù)庫進(jìn)行版本管理 我們在編寫數(shù)據(jù)庫應(yīng)用軟件時 需要考慮這樣的問題 因為我們開發(fā)的軟件可能會安裝在很多用戶的手機(jī)上 如果應(yīng)用使用到了SQLite數(shù)據(jù)庫 我們必須在用戶初次使用軟件時創(chuàng)建出應(yīng)用使用到的數(shù)據(jù)庫表結(jié)構(gòu)及添加一些初始化記錄 另外在軟件

溫馨提示

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

評論

0/150

提交評論