【正文】
le 公司和開(kāi)放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開(kāi)發(fā)。2022 年 8 月由 Google 收購(gòu)注資。隨后 Google 以 Apache 開(kāi)源許可證的授權(quán)方式,發(fā)布了 Android 的源代碼。Android 逐漸擴(kuò)展到平板電腦及其他領(lǐng)域上,如電視、數(shù)碼相機(jī)、游戲機(jī)等。2022 年的第四季度,Android 平臺(tái)手機(jī)的全球市場(chǎng)份額已經(jīng)達(dá)到 %。2022 第一季度 Android 平臺(tái)已占所有移動(dòng)廣告流量來(lái)源的 %,首度超越 iOS。截止 2022 年,主流的手機(jī) OS 為:iOS,Android。圖 21 Android 市場(chǎng)份額. . . . 參考 Android 與其他平臺(tái)的比較根據(jù)圖 21 所示,目前市面上最常用的手機(jī)操作系統(tǒng)就是 Android 和 iOS。蘋(píng)果公司最早于 2022 年 1 月 9 日的 Macworld大會(huì)上公布這個(gè)系統(tǒng),最初是設(shè)計(jì)給 iPhone 使用的,后來(lái)陸續(xù)套用到 iPod touch、iPad以及 Apple TV 等產(chǎn)品上 [14]。下圖是兩者開(kāi)發(fā)的對(duì)比。2)Activity 之間通過(guò) Intent 進(jìn)行通信。做一個(gè)完整的 Android 程序,基本上都會(huì)用到 Activity,因?yàn)?Activity 是 Android程序與用戶交互的窗口。Activity 在四大組件中,無(wú)疑是最復(fù)雜的。從視覺(jué)效果來(lái)看,一個(gè) Activity 占據(jù)當(dāng)前的窗口,響應(yīng)所有窗口事件,具備有控件,菜單等界面元素。對(duì)于開(kāi)發(fā)者而言,就需要派生一個(gè)Activity 的子類,然后實(shí)現(xiàn)上述事情。詳情見(jiàn)第五章的第四小節(jié)。其他應(yīng)用可以通過(guò) ContentResolver 類從該內(nèi)容提供者中獲取或存入數(shù)據(jù)。例如,通訊錄數(shù)據(jù)被多個(gè)應(yīng)用程序使用,且必須存儲(chǔ)在一個(gè)內(nèi)容提供者中。3)ContentProvider 實(shí)現(xiàn)數(shù)據(jù)共享。這是不同應(yīng)用程序間共享數(shù)據(jù)的唯一方式,因?yàn)?android 沒(méi)有提供所有應(yīng)用共同訪問(wèn)的公共存儲(chǔ)區(qū)。5)ContentProvider 使用 URI 來(lái)唯一標(biāo)識(shí)其數(shù)據(jù)集,這里的 URI 以 綴,表示該數(shù)據(jù)由 ContentProvider 來(lái)管理。廣播接收器沒(méi)有用戶界面。通知可以用很多種方式來(lái)吸引用戶的注意力,例如閃動(dòng)背燈、震動(dòng)、播放聲音等。2)廣播接收者的注冊(cè)有兩種方法,分別是程序動(dòng)態(tài)注冊(cè)和 AndroidManifest 文件中進(jìn)行靜態(tài)注冊(cè)。靜態(tài)注冊(cè)無(wú)需擔(dān)憂廣播接收器是否被關(guān)閉,只要設(shè)備是開(kāi)啟狀態(tài),廣播接收器也是打開(kāi)著的。(5)四大組件總結(jié)四大基本組件都需要注冊(cè)才能使用,每個(gè) Activity、service、Content Provider 都需要在 AndroidManifest 文件中進(jìn)行配置。而 broadcast receiver 廣播接收者的注冊(cè)分靜態(tài)注冊(cè)(在 AndroidManifest 文件中進(jìn)行配置)和通過(guò)代碼動(dòng)態(tài)創(chuàng)建并以調(diào)用 ()的方式注冊(cè)至系統(tǒng)。 六大布局聲明 Android 程序布局有兩種方式:(1)使用 XML 文件描述界面布局;(2)在 Java 代碼中通過(guò)調(diào)用方法進(jìn)行控制。使用 XML文件聲明有以下 3 個(gè)特點(diǎn):(1)將程序的表現(xiàn)層和控制層分離;(2)在后期修改用戶界面時(shí),無(wú)須更改程序的源程序;(3)可通過(guò)可視化工具直接看到所設(shè)計(jì)的用戶界面,有利于加快界面設(shè)計(jì)的過(guò)程。在程序運(yùn)行時(shí)動(dòng)態(tài)添加界面布局會(huì)大大降低應(yīng)用響應(yīng)速度,但依然可以在必要時(shí)動(dòng)態(tài)改變屏幕內(nèi)容。建議盡量減少布局嵌套,盡量減少創(chuàng)建 View 對(duì)象的數(shù)量。通過(guò) Relative的相對(duì)其他元素的位置來(lái)布局,可減少塊狀嵌套;(2)另一種減少布局層次的技巧是使用 merge / 標(biāo)簽來(lái)合并布局;(3)重用布局。 五大存儲(chǔ)在 Android 中,可供選擇的存儲(chǔ)方式有 SharedPreferences、文件存儲(chǔ)、SQLite 數(shù)據(jù)庫(kù)方式、內(nèi)容提供器(Content provider)和網(wǎng)絡(luò)存儲(chǔ) [15]。其以鍵值對(duì)的方式存儲(chǔ),使得我們可以很方便的讀取和存入。此外,需要注意的是,SharedPreferences 只能在同一個(gè)包內(nèi)使用,不能在不同的包之間使用。文件存儲(chǔ)方式只支持讀取該應(yīng)用目錄下的文件,讀取非其自身目錄下的文件將會(huì)拋出異常。另外,在默認(rèn)情況下,寫(xiě)入的時(shí)候會(huì)覆蓋原文件內(nèi)容,如果想把新寫(xiě)入的內(nèi)容附加到原文件內(nèi)容后,則可以指定其模式為 。一個(gè) SQLiteDatabase 的實(shí)例代表了一個(gè) SQLite 的數(shù)據(jù)庫(kù),通過(guò) SQLiteDatabase 實(shí)例的一些方法,我們可以執(zhí)行 SQL 語(yǔ)句,對(duì)數(shù)據(jù)庫(kù)進(jìn)行增、刪、查、改的操作。(4)內(nèi)容提供器(Content provider)方式在 Android 的設(shè)計(jì)“哲學(xué)”里是鼓勵(lì)開(kāi)發(fā)者使用內(nèi)部類的,這樣不但使用方便,而且執(zhí)行效率也高。難道兩個(gè)程序之間就沒(méi)有辦法對(duì)于數(shù)據(jù)進(jìn)行交換?解決這個(gè)問(wèn)題主要靠ContentProvider。也就是說(shuō),一個(gè)程序可以通過(guò)實(shí)現(xiàn)一個(gè)Content Provider 的抽象接口將自己的數(shù)據(jù)暴露出去。(5)網(wǎng)絡(luò)存儲(chǔ)HttpUrlConnection 是 包中提供的 API,我們知道 Android SDK 是基于 Java的,所以當(dāng)然優(yōu)先考慮 HttpUrlConnection 這種最原始最基本的 API,其實(shí)大多數(shù)開(kāi)源的聯(lián)網(wǎng)框架基本上也是基于 JDK 的 HttpUrlConnection 進(jìn)行的封裝罷了。HttpClient 和 HttpUrlConnection 的兩種網(wǎng)絡(luò)訪問(wèn)方式編寫(xiě)網(wǎng)絡(luò)代碼,需要自己考慮很多,獲取數(shù)據(jù)或許可以,但是如果要將手機(jī)本地?cái)?shù)據(jù)上傳至網(wǎng)絡(luò),根據(jù)不同的 web 端接口,需要組織不同的數(shù)據(jù)內(nèi)容上傳,給手機(jī)端造成了很大的工作量。Android 主要應(yīng)用于 ARM 平臺(tái),但不僅限于 ARM,通過(guò)編譯控制,在 X8MAC 等體系結(jié)構(gòu)的機(jī)器上同樣可以運(yùn)行。藍(lán)色的代表 java 程序,黃色的代碼為運(yùn)行 JAVA 程序而實(shí)現(xiàn)的虛擬機(jī),綠色部分為C/C++語(yǔ)言編寫(xiě)的程序庫(kù),紅色的代碼內(nèi)核(linux 內(nèi)核+driver)。(1)應(yīng)用程序所有的應(yīng)用程序都是使用 JAVA 語(yǔ)言編寫(xiě)的,每一個(gè)應(yīng)用程序由一個(gè)或者多個(gè)活動(dòng)組成,活動(dòng)必須以 Activity 類為超類,活動(dòng)類似于操作系統(tǒng)上的進(jìn)程,但是活動(dòng)比操作系統(tǒng)的進(jìn)程要更為靈活,與進(jìn)程類似的是,活動(dòng)在多種狀態(tài)之間進(jìn)行切換。(2)應(yīng)用程序框架應(yīng)用程序的架構(gòu)設(shè)計(jì)簡(jiǎn)化了組件的重用;任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過(guò)得遵循框架的安全性限制) 。隱藏在每個(gè)應(yīng)用后面的是一系列的服務(wù)和系統(tǒng), 其中包括;. . . . 參考 1)豐富而又可擴(kuò)展的視圖(Views) ,可以用來(lái)構(gòu)建應(yīng)用程序, 它包括列表(lists) ,網(wǎng)格(grids) ,文本框(text boxes) ,按鈕(buttons) , 甚至可嵌入的 web瀏覽器。 3)資源管理器(Resource Manager)提供非代碼資源的訪問(wèn),如本地字符串,圖形,和布局文件(layout files) 。 5)活動(dòng)管理器(Activity Manager)用來(lái)管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。它們通過(guò)Android 應(yīng)用程序框架為開(kāi)發(fā)者提供服務(wù)。另外這里還有一個(gè)硬件抽象層。包括:顯示器驅(qū)動(dòng),聲音,相機(jī),GPS,GSM 等等。每一個(gè) Android 應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的 Dalvik 虛擬機(jī)實(shí)例。Dalvik 虛擬機(jī)執(zhí)行(.dex)的 Dalvik 可執(zhí)行文件,該格式文件針對(duì)小內(nèi)存使用做了優(yōu)化。Dalvik 虛擬機(jī)依賴于 linux 內(nèi)核的一些功能,比如線程機(jī)制和底層內(nèi)存管理機(jī)制。 Linux 內(nèi)核也同時(shí)作為硬件和軟件棧之間的抽象層。以下為搭建流程:安裝 J D K配置 W i n d o w s 上 J D K的變量環(huán)境下載安裝 E c l i p s e下載安裝 A n d r o i d S D K為 E c l i p s e 安裝A D T 插件圖 31 Android 環(huán)境搭建流程第一步:安裝 JDK。下載到本地電腦后雙擊進(jìn)行安裝。JDK 的全稱是 Java SE Development Kit,也就是 Java 開(kāi)發(fā)工具箱。JDK 是 Java 的核心,包含了 Java 的運(yùn)行環(huán)境(Java Runtime Environment),一堆 Java工具和給開(kāi)發(fā)者開(kāi)發(fā)應(yīng)用程序時(shí)調(diào)用的 Java 類庫(kù)。通過(guò)第二步講到的配置 JDK 的變量環(huán)境,我們可以方便地調(diào)用這些工具及它們的命令。當(dāng)要求系統(tǒng)啟動(dòng)一個(gè)應(yīng)用程序時(shí),系統(tǒng)會(huì)先在當(dāng)前目錄下查找,如果沒(méi)有則在系統(tǒng)變量 Path 指定的路徑去查找。這就是為什么在 Windows 安裝了 JDK 后需要設(shè)置 JDK 的 bin 目錄為系統(tǒng)環(huán)境變量的原因。下面是這三個(gè)變量的設(shè)置方式。創(chuàng)建好后則可以利用%JAVA_HOME%作為 JDK 安裝目錄的統(tǒng)一引用路徑。%JAVA_HOME%\bin。(3)CLASSPATH設(shè)置系統(tǒng)變量名為:CLASSPATH 變量值為:.。%JAVA_HOME%\lib\ 。第三步:下載安裝 Eclipse。Eclipse 不需要安裝,下載后把解壓包解壓后,剪切 eclipse 文件夾到你想安裝的地方,打開(kāi)時(shí)設(shè)置你的工作目錄即可。第四步:下載安裝 Android SDK。我們要通過(guò)Eclipse 來(lái)開(kāi)發(fā) Android 應(yīng)用程序,那么我們需要下載 Android SDK(Software Development Kit)和在 Eclipse 安裝 ADT 插件,這個(gè)插件能讓 Eclipse 和 Android SDK 關(guān)聯(lián)起來(lái)。第五步:為 Eclipse 安裝 ADT 插件。為了使得 Android 應(yīng)用的創(chuàng)建,運(yùn)行和調(diào)試更加方便快捷,Android 的開(kāi)發(fā)團(tuán)隊(duì)專門(mén)針對(duì) Eclipse IDE 定制了一個(gè)插件:Android Development Tools(ADT)。然后在彈出的對(duì)話框中的 Location 中輸入:eclipse/,Name 可以輸入 ADT,點(diǎn)擊“OK”按鈕。 開(kāi)發(fā)所需設(shè)備 eclipse 軟件Eclipse 是著名的跨平臺(tái)的自由集成開(kāi)發(fā)環(huán)境(IDE) 。Eclipse 的本身只是一個(gè)框架平臺(tái),但是眾多插件的支持,使得 Eclipse 擁有較佳的靈活性。Eclipse 就像軟件開(kāi)發(fā)者的“打鐵鋪” ,它一開(kāi)始備有火爐、鐵鉆與鐵錘。這些新工具可擴(kuò)充Eclipse 的功能。Eclipse 設(shè)計(jì)美妙之處,在于所有東西都是外掛,除了底層的核心以外。 Android 手機(jī)/模擬器Android 應(yīng)用最終是要運(yùn)行在手機(jī)上的,所以在調(diào)試代碼的過(guò)程中,難免需要一個(gè)“載體”來(lái)查看應(yīng)用的運(yùn)行效果,此時(shí)就需要一個(gè) Android 真機(jī)或者 Android 模擬器來(lái)作為這個(gè)“載體” 。它是一個(gè)可以運(yùn)行在你電腦上的虛擬設(shè)備。Android 模擬器能夠模擬除了接聽(tīng)和撥打電話外的所有移動(dòng)設(shè)備上的典型功能和行為。同時(shí)它還有一個(gè)屏幕用于顯示 Android 自帶應(yīng)用程序和你自己的應(yīng)用程序。Android 模擬器同樣具有強(qiáng)大的調(diào)試能力,例如能夠記錄內(nèi)核輸出的控制臺(tái)、模擬程序中斷(比如接受短信或打入電話)、模擬數(shù)據(jù)通道中的延時(shí)效果和遺失。. . . . 參考 第四章 系統(tǒng)分析 功能分析本設(shè)計(jì)旨在讓廣大手機(jī)用戶能夠在第一時(shí)間獲取最新的天氣預(yù)報(bào)信息,以便提前預(yù)防,方便出行。本設(shè)計(jì)研究一個(gè)實(shí)用穩(wěn)定的天氣預(yù)報(bào)系統(tǒng),同時(shí)要使其能滿足大部分用戶的需求,主要功能結(jié)構(gòu)圖如圖所示:基于 A n d r o i d 的天氣預(yù)報(bào)系統(tǒng)設(shè)計(jì)城市定位數(shù)據(jù)刷新 加載界面 詳細(xì)信息即時(shí)天氣 未來(lái)天氣 版權(quán)信息 自動(dòng)定位 手動(dòng)定位P M指數(shù)溫度濕度 風(fēng)向風(fēng)力紫外線強(qiáng)度穿衣指數(shù)圖 41 功能結(jié)構(gòu)圖數(shù)據(jù)刷新天氣預(yù)報(bào)系統(tǒng)最重要的是獲取有效的天氣信息,本設(shè)計(jì)有兩種方法進(jìn)行天氣數(shù)據(jù)的刷新:下拉刷新和自動(dòng)半小時(shí)刷新。加載界面 . . . . 參考程序開(kāi)始運(yùn)行時(shí)顯示加載界面,此界面是應(yīng)用程序最先展現(xiàn)的窗口,應(yīng)盡量保持界面信息簡(jiǎn)潔。加載界面的主要功能是為應(yīng)用程序的運(yùn)行做準(zhǔn)備,包括判斷是否首次使用、數(shù)據(jù)的初始化工作等。 Z h a n g C h u n f u . S w u s t U n i v e r s i t ys w u s t圖 42 版權(quán)信息圖城市定位由自動(dòng)設(shè)置預(yù)報(bào)城市與手動(dòng)設(shè)置兩部分組成,自動(dòng)設(shè)置實(shí)現(xiàn) GPS 定位功能,自動(dòng)確定當(dāng)前用戶所在地;而手動(dòng)設(shè)置則通過(guò)可伸展性下拉列表單擊選擇系統(tǒng)數(shù)據(jù)庫(kù)中預(yù)存的城市來(lái)進(jìn)行設(shè)置,同時(shí)為了方便用戶查找,以按鈕的形式來(lái)選擇預(yù)報(bào)城市。PM 指數(shù)隨著人們生活質(zhì)量的提高,對(duì)于空氣質(zhì)量越發(fā)關(guān)注。詳細(xì)信息 為了界面簡(jiǎn)潔美觀,同時(shí)方便用戶了解更多信息,特別在主界面中添加一欄“詳細(xì)信息” , “詳細(xì)信息”一欄包括體感溫度、濕度、風(fēng)向風(fēng)力、紫外線強(qiáng)度、穿衣指數(shù)等信息,將來(lái)若想繼續(xù)添加其他信息,也可以在這個(gè)欄目里實(shí)現(xiàn)其他功能。這些天氣數(shù)據(jù)是通過(guò)后臺(tái)服務(wù)獲取的,這個(gè)后臺(tái)服務(wù)可以按照一定時(shí)間間隔,從互聯(lián)網(wǎng)上獲取天氣預(yù)報(bào)信息。它是指對(duì)軟件的人機(jī)交互、操作邏輯、界面美觀的整體設(shè)計(jì)。用戶