
課程要求
1、上課考勤 6 次,課堂作業(yè) 3 次。
2、上機實驗 4 次:實驗報告格式規(guī)范,內容充實。
3、期末課程設計:程序 + 大作業(yè)。
Ⅰ、Android 簡介
-
1.1 手機操作系統(tǒng)
1、早期的手機內部是沒有智能操作系統(tǒng)的,所有的軟件都是由手機生產商在設計時所定制,因此基本沒有擴展功能。
2、后期的手機使用了專為移動設備開發(fā)的操作系統(tǒng),使用者可以根據(jù)需要安裝不同類型的軟件。
3、操作系統(tǒng)對于手機的硬件配置要求較高,硬件成本、操作系統(tǒng)成本使手機的售價明顯高于不使用操作系統(tǒng)的手機。
4、操作系統(tǒng)包括: Android、 iPhoneOS、Windows mobile、 Windows Phone7、 Symbian、黑莓、 Palmos、Linux
-
1.2 Android 特征
1、界面設計上,提供豐富的界面控件。
加快了用戶界面的開發(fā)速度,保證了程序界面的一致性。
將界面設計與程序邏輯分離,使用XML文件對界面布局進行描述,有利于界面的修改和維護。
2、提供輕量級的進程間通訊機制 Intent,實現(xiàn)了跨進程組件通信和系統(tǒng)級廣播消息的發(fā)送。
3、提供了Service作為無用戶界面、長時間后臺運行的組件。
Service無需用戶干預,可以長時間穩(wěn)定的運行,可為應用程序提供特定的后臺功能。
4、支持高效快速的數(shù)據(jù)存儲方式:Shared Preferences、文件存儲、輕量級數(shù)據(jù)庫 SQLite。
5、提供了 Content Provider(通用的共享數(shù)據(jù)接口),實現(xiàn)了跨進程共享數(shù)據(jù)。
可以無需了解數(shù)據(jù)源、路徑的情況下,對共享數(shù)據(jù)進行查詢、添加、刪除、更新。
6、支持位置服務和地圖應用。
可以通過SDK提供的API直接獲取當前位置,追蹤設備的移動路線,或設定敏感區(qū)域。
可以將Google地圖嵌入到應用程序中,實現(xiàn)地理信息可視化開發(fā)。
7、支持Widget插件,開發(fā)桌面應用,實現(xiàn)常見的一些小工具,或在主屏上顯示重要信息。
8、Android NDK 支持使用本地代碼(C或C++)開發(fā)應用程序的部分核心模塊。
-
1.3 Android 體系結構
一、應用程序層
提供一系列的核心應用程序,包括:電子郵件、客戶端、瀏覽器、通訊錄、日歷等
二、程序框架層
提供平臺基本的管理功能和組件重用機制
Content Provider:共享私有數(shù)據(jù),實現(xiàn)跨進程的數(shù)據(jù)訪問
Package Manager:管理安裝在系統(tǒng)內的應用程序
三、中間件層
Android 運行時含核心庫和 ART 虛擬機
1、核心庫:提供Android系統(tǒng)的特有函數(shù)功能和Java語言函數(shù)功能
2、ART虛擬機:采用預編譯技術,在安裝應用程序時把程序代碼轉換成機器語言,啟動、運行更快,耗電更少
四、Linux 內核
Linux 3.0內核,它是硬件和其他軟件堆層之間的一個抽象隔離層
提供安全機制、內存管理、進程管理、網(wǎng)絡協(xié)議堆棧、驅動程序等
-
1.4 MVC 概述
一、MVC 模式
MVC 模式譯為 “模型-視圖-控制器” ,是軟件工程中的一種軟件架構
”Model-View-Controller“ 模式將交互式應用程序分成3個組件
① 模型:業(yè)務邏輯層,包含核心功能和數(shù)據(jù)并實現(xiàn)核心業(yè)務邏輯
② 視圖:表示層,向用戶顯示信息
③ 控制器:控制層,處理用戶輸入,并實現(xiàn)模型層跟視圖層的協(xié)同工作
二、MVC應用領域
① 具有靈活人- 機界面的交互式應用程序
② 針對不同的用戶角色,提供不同的用戶界面
三、變更-傳播機制
① 一個模型對應多個視圖
② 維護數(shù)據(jù)的一致性
1、M(Model)模型層
com.sharpandroid.domain:實體模型層,存放在程序中調用到的實體類。
com.sharpandroid.servier:業(yè)務模型層,存放在程序中調用到的業(yè)務邏輯。
數(shù)據(jù)庫、網(wǎng)絡、業(yè)務計算的操作都在該層處理。
2、V(View)顯示層
Android 很好地將顯示層抽離,放入"res/"目錄中以XML的形式體現(xiàn)。
雖然對于控件屬性可以通過Java代碼修改,但還是推薦在XML中設置,遇到動態(tài)修改再用硬編碼的方式。這樣增加了程序的可讀性,有利于軟件后期的維護。
main.xml、shownews.xmlao:布局文件。
strings.xml:存放常量。
drawable:存放使用的圖片文件。
3、C(Controller)控制層
Control 是 Acticity 的天職,你只用告訴Acticity做什么,而至于怎么做那是模型層的事。
所以不要在Acitivity中寫代碼,要通過 Activity 交割 Model 業(yè)務邏輯層處理。
Android中Acitivity的響應時間是5s,如果耗時的操作放在這里,程序就很容易被回收掉。
-
1.5 Android 程序結構
一、HelloAndroid程序的結構
1、在建立程序的過程中,ADT會自動建立一些目錄和文件;并且以工程名稱HelloAndroid作為根目錄,將所有自動生成的和非自動生成的文件都保存在這個根目錄下。
2、這些目錄和文件有其固定的作用,有的允許修改,有的不能修改。
二、子目錄、庫、工程文件
5個子目錄:src、gen、assets、bin、res
1個庫:android.jar
3個工程文件:Androidmanifest.xml、project.properties、proguard.cfg
1、 src 目錄
源代碼目錄,保存所有允許修改的 java 文件和用戶自己添加的 java 文件。
工程建立初期,ADT根據(jù)工程向導中的"Create Activity"選項,自動建立HelloAndroidActivity.java文件,該文件可以修改。
為了顯示圖形界面,需要在 HelloAndroidActivity.java 中繼承Activity類,并在 onCreate() 函數(shù)中聲明需要顯示的內容。
代碼第3、4行,引入 Activity 和 Bundle 兩個重要的包,用于子類繼承和信息傳遞
代碼第6行,聲明 HelloAndroid 類繼承于 Activity 類
代碼第8行,表明需要重寫 onCreate() 函數(shù)
代碼第9行,onCreate() 會在 Activity 首次啟動時被調用,當作程序的主入口函數(shù)
代碼第10行,調用父類的 onCreate() 函數(shù),并將 Activity 的狀態(tài)信息傳遞給父類
代碼第11行,XML語言描述的用戶界面,保存在res/layout/main.xml資源文件中
2、 assets 目錄
用來存放原始格式的文件(音頻、視頻等二進制格式文件),缺省為空目錄。
此目錄的資源不能被 R.java 文件索引,因此只能以字節(jié)流的形式進行讀取。
3、 bin 目錄
保存了編譯過程中所產生的文件,以及最終的 apk 文件。
4、 res 目錄
a.子目錄 drawable-hdpi、drawable-mdpi、drawable-ldpi 用來保存針對不同屏幕尺寸需要顯示的圖像大小。上述目錄中自動引入了不同尺寸的圖標文件 icon.png,系統(tǒng)會根據(jù)屏幕分辨率為程序加載。
b.子目錄 layout 用來保存與用戶界面相關的布局文件(main.xml),使用XML語言描述。
代碼第6行,使用 TextView 控件(用來顯示字符串文本)
代碼第9行,顯示的字符串,@string/hello是資源引用(strings.xml 文件中name屬性為hello的string元素)
c.子目錄 values 用來保存顏色、風格、主題、字符串等。
目錄自動生成了strings.xml文件,程序名稱和界面顯示都保存在這個文件中。
代碼第3行,表明顯示的字符串應是”Hello World,HelloAndroidActivity!"
5、gen 目錄
① 用于保存ADT自動生成的 java 文件,例如 R.java、AIDL文件,這個目錄中的文件不建議用戶進行任何修改。
R.java 包含對 drawable、layout、values 目錄內資源的引用指針,程序能夠直接通過R類引用目錄中的資源。
② R類內部定義的子類,對應資源類型;如:drawable類對應圖像資源類型,layout 類對應布局資源類型。
子類內部定義的靜態(tài)變量表示資源名稱,對應資源的文件名(或XML文件的name屬性);
如:layout類的內部變量main對應src/layout/main.xml文件,string類的內部變量hello對應values/strings.xml文件中name屬性為hello的資源。
③ 引用資源
a.代碼中引用,引用格式:R.資源類型.資源名稱(或XML文件的name屬性),如:R.layout.main
b.資源中引用,引用格式:@包名稱/資源類型/資源名稱(或XML文件的name屬性),如:@string/hello
6、android.jar 庫
函數(shù)庫文件,Android 系統(tǒng)所支持的 API 都包含在這個文件中。
7、工程文件
① proguard.cfg:供 ProGuard 工具進行代碼優(yōu)化、代碼混淆的配置文件。
② project.properties:記錄工程的相關設置,如:編譯目標、apk設置等。
可以通過右鍵點擊工程名稱,選擇 "Properties" 進行修改。
③ Androidmanifest.xml:程序聲明文件,包含運行應用程序前所必須掌握的信息。
如:應用名稱、圖標、包名稱、模塊組成、授權、SDK最低版本等。
a)根元素 manifest 定義了4個屬性
xmlns:android 屬性定義了 Android 的命名空間
package 屬性定義了應用程序的包名稱
b)元素 application 聲明了4個子元素(重要)
Activity、Service、BroadcastReceiver、ContentProvider
c)元素 intent-filter 聲明了2個子元素
action、category,其作用是將 HelloAndroidActivity 作為默認的啟動模塊
-
1.6 命令行創(chuàng)建 AVD
1、使用 CMD 并進入<Android SDK>\tools 目錄
2、通過 android list targets 命令搜索有效的Android系統(tǒng)
有2個可以選擇的編譯目標:4.0 Android系統(tǒng)(id為1)支持 Google API 的 4.0 Android系統(tǒng)(id為2)
3、使用 android create avd -n android 4.0 -t 1 命令(-n 表明AVD的名稱,-t 表明系統(tǒng)的id值)
根據(jù)需要確定是否定制模擬器支持的硬件清單(Do you wish to create a custom hardware profile)
-
1.7 命令行創(chuàng)建程序
1、使用 CMD 并進入<Android SDK>\tools 目錄
2、使用 android list targets 命令搜索有效的Android系統(tǒng)
3、使用 android create project -n HelloCommandline -k edu.hrbeu.HelloCommandline -a HelloCommandline -t 1 -p (目錄) 命令建立工程目錄和基本文件
android.bat 可以建立和更新Android工程,還可以管理AVD。
Ⅱ、Android 生命周期與組件通信
-
2.1 Android 生命周期
程序的生命周期指在Android系統(tǒng)中進程從啟動到終止的所有階段。
1、前臺進程
前臺進程是最重要的進程,是與用戶交互的進程。包含以下4種情況:
① 進程中的Activity正在與用戶進行交互。
② 進程服務被Activity調用,而且這個Activity正在與用戶進行交互。
③ 進程服務正在執(zhí)行聲明周期中的回調函數(shù),如 onCreate()、onStart()、onDestroy0。
④ 進程的 BroadcastReceiver 正在執(zhí)行 onReceive() 函數(shù)。
在多個前臺進程同時運行時,可能出現(xiàn)資源不足的情況,此時會清除部分前臺進程,保證用戶界面能夠及時響應。
2、可見進程
可見進程指部分界面能被用戶看見,卻不在前臺與用戶交互,不響應界面的進程。
如果一個進程包含服務,且這個服務正在被用戶可見的Activity調用,此進程同樣被視為可見進程。
一般只存在少量的可見進程,只有在特殊的情況下,才會清除可見進程保證前臺進程的資源。
3、服務進程
服務進程指包含已啟動服務的進程。沒有用戶界面,在后臺長期運行。
除非不能保證前臺進程或可視進程所必要的資源,否則不強行清除服務進程。
4、后臺進程
后臺進程指不包含任何已啟動的服務,而且沒有任何用戶可見的Activity的進程。
一般存在數(shù)量較多的后臺進程,在系統(tǒng)資源緊張時,將優(yōu)先清除用戶較長時間沒有見到的后臺進程。
5、空進程
空進程指不包含任何活躍組件的進程。
空進程在系統(tǒng)資源緊張時會被首先清除。但為了提高應用程序的啟動速度,會將空進程保存在系統(tǒng)內存用,在重新啟動該程序時,空進程會被重新使用。
-
2.2 Activity 組件
一、Android 組件簡介
組件是可以調用的基本功能模塊,應用程序就是由組件組成的。
Android系統(tǒng)有四個重要的組件:Activity、Service、BroadcastReceiver、ContentProvider。
1、Activity
Activity是程序的呈現(xiàn)層,顯示可視化的用戶界面,并接收與用戶交互所產生的界面事件。
應用程序可以包含一個或多個Activity,在程序啟動后會呈現(xiàn)一個Activity,用于提示正常啟動。
2、Service
Service用于沒有用戶界面,但需要長時間在后臺運行的應用。
3、BroadcastReceiver
BroadcastReceiver是用來接受并響應廣播消息的組件。
可以通過Activity或Notification通知用戶收到重要信息。
Notification能夠通過多種方法提示用戶,包括閃動背景燈、震動設備、發(fā)出聲音等。
4、ContentProvider
ContentProvider是一種共享數(shù)據(jù)機制,應用程序通過它訪問其他程序的私有數(shù)據(jù)。
私有數(shù)據(jù)可以是存儲在文件系統(tǒng)中的文件,也可以是SQLite中的數(shù)據(jù)庫。
二、Task 與 Activity棧
1、一個Task是用戶可以完成一個特定目標的一組Activity,與Activity屬于哪個Application無關。例如,從聯(lián)系人列表開始,選擇一個郵箱地址,然后附加一個圖片。聯(lián)系人列表、郵箱、圖片都存在于不同的Activity中,但卻屬于同一個Task。
2、啟動Task的Activity被稱作根Activity。通常Task是從應用管理器、主屏(長按HOME鍵)開始的。用戶可以通過點擊根Activity的圖標回到Task里去。使用BACK鍵可以回到這個Task的前一個Activity里,Activity??梢杂梢粋€或多個Task組成。
3、Task的一個重要的特性就是,用戶可以中斷當前任務,去進行另一個Task,又可以返回到這個Task。目的是為了用戶可以同時運行多個任務,并且可以在這些任務間切換。
4、當用戶在Application中,從一個Activity跳到另一個時Activity,會保存用戶訪問的線性導航歷史,這就是Activity棧。當用戶按BACK鍵的時候,棧中的上一個Activity就會被展示出來。用戶可以一直按BACK鍵,直到返回主屏Activity。
三、Activity 基本狀態(tài)
Activity的四種基本狀態(tài):
1、活動態(tài)(Active):Activity在用戶界面中處于最上層,完全能被用戶看到,能夠與用戶進行交互。
2、暫停態(tài)(Paused):Activity界面上被部分遮擋,不再處于界面的最上層,且不能與用戶進行交互。
3、停止狀態(tài)(Stopped):Activity在界面上完全不能被用戶看到,也就是說被其他 Activity 全部遮擋。
4、非活動態(tài)(Killed):又稱為死亡態(tài),是指不在上面三種狀態(tài)之內的Activity狀態(tài)。
根據(jù)這幾種狀態(tài),Activity棧遵循“后進先出”的規(guī)則。
四、Activity 生命周期
1、舉例:建立一個新的Android工程
工程名稱:NewActivity
包名稱:edu.neu.androidlab
Activity名稱:NewActivity
代碼第8行,一個Activity就是一個Java類,而且必須繼承自Activity基類。
代碼第13行,復寫了基類的 onCreate() 方法。
代碼第14行,調用了父類的 onCreate() 方法。這在創(chuàng)建Activity時是必須的,類似于其它面向對象語言中的構造函數(shù)。
代碼第15行,采用setContentView() 方法設置布局文件。
代碼第16和17行,findViewByld() 方法功能是通過控件ID獲得所需的控件對象。此方法返回控件基類View,通過強制類型轉換成所需的控件對象。
代碼第18行和19行,完成相應控件顯示文本的設置。
2、AndroidManifest.xml文件中聲明Activity的代碼如下:
代碼第2行,屬性android:name定義了Activity類的名稱。
代碼第3行,屬性android:label定義了Activity的標簽名稱。
3、可以按照需要布局界面控件,如上面的Activity添加了一個按鈕(Button)和一個文本框(TextView)。其聲明代碼如下所示:
事件回調函數(shù)在生命周期中起重要作用,在這些函數(shù)中添加相應的代碼可以實現(xiàn)相應的功能。
1、完整生存期
函數(shù)的調用順序:onCreate() → onStart()→ onResume() → onPause()→ onStop()→ onDestroy()
調用onCreate()函數(shù)分配資源
調用onStart()將Activity顯示在屏幕上
調用onResume()獲取屏幕焦點
調用onPause()、onStop()、onDestroy(),釋放資源并銷毀進。
2、可視生存期
可視生存期是指從調用onStart()到調用onStop()之間的周期階段。
3、活動生存期
活動生存期是指從調用onResume()到調用onPause()之間的周期階段。
-
2.3 Intent 意圖
一、Intent基本構成
二、 Intent形式
三、Intent Filter
四、Activity信息傳遞
五、獲取Activity返回值














