進階應用程式設計 2014/12/21

Post on 25-Jul-2015

189 Views

Category:

Engineering

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

進階程式設計⺩王哲輝

在開始之前

Android Studio 1.0 發佈了

⾄至於那個棄嬰...

7⽉月開始看起來就沒什麼在維護

專案範本好像也壞掉了

⼀一定要知道的開發者網站

http://d.android.com

Android 程式設計

Android 程式設計

總之先建個專案吧

https://github.com/freesamael/npu-java-course-2014-fall/

匯⼊入專案

執⾏行專案

或⽤用 Android Studio 匯⼊入專案

執⾏行專案

專案結構⽐比較

專案結構⽐比較

專案結構⽐比較

manifest n. 載貨單, 運貨單, 旅客名單系統藉由讀取 manifest 檔案註冊 app 元件

專案結構⽐比較

專案結構⽐比較

java 原始碼檔案

專案結構⽐比較

專案結構⽐比較

資源檔 (字串、佈景、⾵風格、圖⽚片、動畫,...)

專案結構⽐比較

專案結構⽐比較

編譯設定 (Gradle vs. Ant)

Android App 組成

Android App 組成

Activity使⽤用者介⾯面

Android App 組成

Activity

Service

使⽤用者介⾯面

背景服務

Android App 組成

Activity

Service

Broadcast Receiver

使⽤用者介⾯面

背景服務

接收廣播通知

Android App 組成

Activity

Service

Broadcast Receiver

Content Provider

使⽤用者介⾯面

背景服務

接收廣播通知

內容提供

Android App 組成

Activity

Service

Broadcast Receiver

Content Provider

使⽤用者介⾯面

背景服務

接收廣播通知

內容提供

Activity

認識 App Manifest

http://developer.android.com/guide/topics/manifest/manifest-intro.html#filestruct

認識 Intent

認識 Intent

activity n. 活動, ⾏行動, 活躍, 活⼒力

認識 Intent

intent n. 意圖, 含義, 故意

activity n. 活動, ⾏行動, 活躍, 活⼒力

認識 Intent

intent n. 意圖, 含義, 故意

activity n. 活動, ⾏行動, 活躍, 活⼒力

“執⾏行特定活動,以讓使⽤用者完成特定意圖”

例:執⾏行⼀一個活動,讓使⽤用者得以觀看資管系網⾴頁

例:執⾏行⼀一個活動,讓使⽤用者得以觀看資管系網⾴頁

⺫⽬目的: 動作 (action) = 觀看 網址 (data_uri) = http://mis.npu.edu.tw

例:執⾏行⼀一個活動,讓使⽤用者得以觀看資管系網⾴頁

⺫⽬目的: 動作 (action) = 觀看 網址 (data_uri) = http://mis.npu.edu.tw

adb shell am start -a "android.intent.action.VIEW" -d "http://mis.npu.edu.tw"

斯斯有三種,Intent 分兩種

斯斯有三種,Intent 分兩種隱含意圖 (implicit intent): 不指定完成 intent 的程式或元件

斯斯有三種,Intent 分兩種隱含意圖 (implicit intent): 不指定完成 intent 的程式或元件

明確意圖 (explicit intent): 指定完成 intent 的程式或元件

斯斯有三種,Intent 分兩種隱含意圖 (implicit intent): 不指定完成 intent 的程式或元件

明確意圖 (explicit intent): 指定完成 intent 的程式或元件

adb shell am start -a "android.intent.action.VIEW" -d "http://mis.npu.edu.tw"

斯斯有三種,Intent 分兩種隱含意圖 (implicit intent): 不指定完成 intent 的程式或元件

明確意圖 (explicit intent): 指定完成 intent 的程式或元件

adb shell am start -a "android.intent.action.VIEW" -d "http://mis.npu.edu.tw"

adb shell am start -a "android.intent.action.VIEW" -d "http://mis.npu.edu.tw" com.android.browser

z

z

敘述意圖過濾器 (intent filter)

z

敘述意圖過濾器 (intent filter)

透過意圖匹配 (intent matching) 找到適當程式元件

Activity ⽣生命週期

任務(Task)與 返回堆疊(Back Stack)

Application ⽣生命週期 != Activity ⽣生命週期

Application ⽣生命週期 != Activity ⽣生命週期

但是有相關的

最常⾒見的⾃自動結束時機

⾃自動結束:OOM Killer

Android 系統在記憶體不⾜足的時候, 會由 OOM (out-of-memory) killer 結束 oom_adj 值較⼤大的程序。

http://developer.android.com/guide/components/processes-and-threads.html

⼿手動結束:Task Killer⼿手動滑開的時候:

Task 中的所有 Activity 會被結束, 如果某程序已經沒有其他正在執⾏行的元件,該程序會被結束。

⼿手動結束:Task Killer⼿手動滑開的時候:

Task 中的所有 Activity 會被結束, 如果某程序已經沒有其他正在執⾏行的元件,該程序會被結束。

也就是說,滑掉不保證⼀一定會導致程序結束;沒滑掉的也不⾒見得還在執⾏行。

⼿手動結束:Task Killer⼿手動滑開的時候:

Task 中的所有 Activity 會被結束, 如果某程序已經沒有其他正在執⾏行的元件,該程序會被結束。

也就是說,滑掉不保證⼀一定會導致程序結束;沒滑掉的也不⾒見得還在執⾏行。

所以它叫 recent apps,不稱為 running apps。

認識資源檔MyProject/ src/ MyActivity.java res/ layout/ main.xml info.xml layout-land/ main.xml info.xml

在 Android 上,可以針對不同的裝置,提供不同的 佈局、圖⽚片、字串、動畫、⾵風格等各種資源,藉以 呈現不同的 UI。

http://developer.android.com/guide/topics/resources/providing-resources.html

在程式碼中使⽤用資源

資源檔在 Android 編譯流程中會產⽣生成 R.java

圖形使⽤用者介⾯面

視窗 (Window) 圖形使⽤用者介⾯面的基礎

Macintosh (1984)

視窗內容 (Window Content): 完全由開發者⾃自⾏行設計的內容介⾯面

視窗裝飾 (Window Decoration): 由視窗管理員繪製的介⾯面,提供諸如 標題列、最⼤大化、最⼩小化、關閉、狀態列、⼤大⼩小調整等功能

Android 也有視窗嗎?

視窗內容

瀏覽列 (navigation bar)

狀態列 (status bar)動作列 (action bar)

控制項 (Widget / Control / Component / View)

常⾒見的佈局 (Layout)⽔水平

垂 直

格狀

控制項/佈局階層

Hierarchy Viewer (Demo)

Lab 1 - 佈局練習

試做出如左圖形式之佈局, 不需實作功能。

事件傳遞

Button.onTouchEvent() 該如何實作?

事件傳遞

public void onTouchEvent() {mCalculator.onClick();

}

事件傳遞

public void onTouchEvent() {mCalculator.onClick();

}

如何設定 mCalculator?

事件傳遞

public void onTouchEvent() {mCalculator.onClick();

}

如何設定 mCalculator?

如何⽀支援 Calculator 以外的型別?

事件傳遞

public void onTouchEvent() {mCalculator.onClick();

}

如何設定 mCalculator?

如何⽀支援 Calculator 以外的型別?

觀察者模式 (Observer Pattern)

觀察者模式

觀察者模式Button

觀察者模式ButtonOnClickListener

觀察者模式ButtonOnClickListener

MyOnClickListener

public class MyOnClickListener implements OnClickListener {public void onClick(View v) {

...}

}

實作觀察者

public class MyOnClickListener implements OnClickListener {public void onClick(View v) {

...}

}

實作觀察者

button.setOnClickListener(new MyOnClickListener());註冊觀察者

public class MyOnClickListener implements OnClickListener {public void onClick(View v) {

...}

}

實作觀察者

button.setOnClickListener(new MyOnClickListener());註冊觀察者

public boolean onTouchEvent(MotionEvent event) {if (...) {

for (OnClickListener listener : mListeners) {listener.onClick(this);

}return true;

}return false;

}

通知觀察者 (在 Framework 內)

接收點擊事件

+

或者

Lab 2 - 點擊事件

實作主要功能

Lenna ⼜又來了

loadLennaV1

Lenna ⼜又來了

loadLennaV1

Lenna ⼜又來了

loadLennaV1

loadLennaV2

Lenna ⼜又來了

loadLennaV1

loadLennaV2

Lenna ⼜又來了

loadLennaV1

loadLennaV2

loadLennaV3

Lenna ⼜又來了

loadLennaV1

loadLennaV2

loadLennaV3

Lenna ⼜又來了

loadLennaV1

loadLennaV2

loadLennaV3

loadLennaV4

AsyncTask

在背景執⾏行緒執⾏行 耗時間的任務,再適當 透過主執⾏行緒更新 UI

這圖⼀一看就知道⼤大陸網站偷來的...

Lab 3 - BMI 計算器實作⼀一 App,讓使⽤用者輸⼊入⾝身⾼高、體重,算出其 BMI。

實作⼀一 App,讓使⽤用者輸⼊入⾝身⾼高、體重,算出其 BMI。

Lab 3 - 沒品 BMI 計算器

實作⼀一 App,讓使⽤用者輸⼊入⾝身⾼高、體重,算出其 BMI。

Lab 3 - 沒品 BMI 計算器

• 若 BMI < 18.5,在畫⾯面上顯⽰示⼀一隻猴⼦子的圖⽚片,並⽤用 Toast 秀出「死猴⼦子,你太瘦了!」

實作⼀一 App,讓使⽤用者輸⼊入⾝身⾼高、體重,算出其 BMI。

Lab 3 - 沒品 BMI 計算器

• 若 BMI < 18.5,在畫⾯面上顯⽰示⼀一隻猴⼦子的圖⽚片,並⽤用 Toast 秀出「死猴⼦子,你太瘦了!」

• 若 BMI > 24,在畫⾯面上顯⽰示⼀一隻豬的圖⽚片,並⽤用 Toast 秀出「⼋八戒,該減肥了!」

實作⼀一 App,讓使⽤用者輸⼊入⾝身⾼高、體重,算出其 BMI。

Lab 3 - 沒品 BMI 計算器

• 若 BMI 介於兩者之間,在畫⾯面上顯⽰示⼀一隻河童的圖⽚片,並⽤用 Toast 秀出「不是猴⼦子不是豬,你沙悟淨唷!」

• 若 BMI < 18.5,在畫⾯面上顯⽰示⼀一隻猴⼦子的圖⽚片,並⽤用 Toast 秀出「死猴⼦子,你太瘦了!」

• 若 BMI > 24,在畫⾯面上顯⽰示⼀一隻豬的圖⽚片,並⽤用 Toast 秀出「⼋八戒,該減肥了!」

期末專案

⾃自由發揮準備單⾴頁簡報: 1. App 簡介 2. 組員名單及負責的功能

top related