580 likes | 802 Vues
人機介面 Android Framework. http ://www.cs.nccu.edu.tw/~ chenaho/Workshop. Android OS Stack. 四大程式元件簡介. Activity. Intent. Service. Broadcast Receiver. Content Provider. View System 簡介. Layouts. UI s. 主程式架構說明 & 練習. Android OS Stack. 四大程式元件簡介. Activity. Intent. Service.
E N D
人機介面Android Framework http://www.cs.nccu.edu.tw/~chenaho/Workshop
Android OS Stack 四大程式元件簡介 Activity Intent Service Broadcast Receiver Content Provider View System簡介 Layouts UI s 主程式架構說明&練習
Android OS Stack 四大程式元件簡介 Activity Intent Service Broadcast Receiver Content Provider View System簡介 Layouts UI s 主程式架構說明&練習
Linux Kernel • Base on Linux 2.6 • 已修改kernel, 以避免GPL授權問題(連結) • Linux 版權GNU General Public License version 2 (GPLv2) • Driver移動至linuxuserspace,硬體廠商不需要公開driver source • Power Management修改 • 針對手機環境 • 沒有使用, 就關掉
Libraries • Library以c/c++開發 • 屬系統元件, 開發者可以透過Application Framework 來使用這些功能
Android Runtime • Core Libraries • 對應於Java Programming Language • Dalvik Virtual Machine (簡稱DVM) • 針對手機開發 • Run(綁) on Linux Virtual Memory, multiple processes • 執行指令精簡(節省記憶體)&CPU效率(not JIT) • 詳細說明, 請看連結
Application Framework • Google提供API,此framework內已經具備多種不同的基礎軟體元件,在開發app時,可直接使用 • 內容可參考網頁 • http://developer.android.com/reference/packages.html
Applications • 包含內建的應用程式-聯絡人、eMail 、Map 、Calendar 、簡訊…等等 • 從Market下載的程式 • 自行開發的程式
Applications(cont.) • 使用Java language開發 • 編譯完成, 以tool/aapt.exe 包裹為.apk • Apk ->application • 三種基本特性 • 每個application在自己的Linux process中執行 • 每個process有自己的Java VM, isolate from other applications • 每個application權限獨立分開, 不能讀取其他application的檔案
Android OS Stack 四大程式元件簡介 Activity Intent Service Broadcast Receiver Content Provider View System簡介 Layouts UI s App權限管理與設定
Application Framework上應用程式常用的四大區塊 • 四大元件: • Activities-管理應用程式顯示畫面的類別 • Activity Life Cycle • Services-服務功能 • Services Life Cycle • Broadcast receivers -意圖與廣播接收 • Content Provider-內容提供 • 溝通橋樑:Intent
1.Activity • 包括UI, 以及與user互動 • 上面可以放button、list、picture、text… • UI可動態調整(增加、減少、換位置) • 透過intent跳轉至其他activity • 費時的程式要放到Service, handler…, 超過5秒, 會出現ANR (Android is Not Responding) Reference: Component Lifecycles
ActivityLife Cycle !!! • 啟動->出現畫面 • onCreate() • onStart() • onResume() • 關閉畫面->結束 • onPause() • onStop() • onDestroy() Reference: Component Lifecycles
Android 的虛擬機(VM)-主要有四種狀態: • Active (活動) • 使用者啟動應用程式或 Activity 後,Activity 運行中的狀態 • 在 Android 平台上,同一個時刻只會有一個 Activity 處於活動(Active)或運行(Running)狀態。 Reference: http://code.google.com/p/androidbmi/wiki/LifeCycle
Paused (暫停) • 「Paused」狀態是當 Activity 暫時暗下來,退到背景畫面的狀態。 • 當我們使用Toast、AlertDialog、或是電話來了時,都會讓原本運行的 Activity 退到背景畫面。新出現的Toast、AlertDialog等介面元件蓋住了原來的 Activity 畫面。Activity 處在「Paused」狀態時,使用者無法與原 Activity 互動。 • Demo => ApiDemo , App/Dialog
Stopped (停止) • 「Stopped」狀態是有其他 Activity 正在執行,而這個 Activity 已經離開螢幕,不再動作的狀態。 • 透過長按「Home」鈕,可以叫出所有處於「Stopped」狀態的應用程式列表。 • 在「Stopped」狀態的 Activity,還可以透過「Notification」來喚醒。
Dead (已回收或未啟動) • 「Dead」狀態是 Activity 尚未被啟動、已經被手動終止,或已經被系統回收的狀態。 • 要手動終止 Activity,可以在程式中呼叫「finish」函式 • 如果是被系統回收,可能是因為記憶體不足了,所以系統根據記憶體不足時的回收規則,將處於「Stopped」狀態的 Activity 所佔用的記憶體回收
Intent • 用來描述一個程式想要作些什麼事情 • 每個Intent都帶有一個動作(action),並根據不同的動作去行動 • 例 public void onClick() { Uri uri = Uri.parse("http://www.nccu.com.tw/"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } • 要開啟一個網頁, 由Android去決定誰要開網頁 • Intent Filter : 向系統宣告該Activity可以做甚麼 ?
Demo : • demo code -> demo_Intent • 透過Intent , 達到Activity 之間的切換
Service • 長時間於背景執行, 無UI畫面 • 可避免ANR的問題 • 例 • 播放音樂 • 背景接收網路訊息 • 壓縮or解壓縮檔案 • 利用bindService(), 讓Activity與Service溝通
Broadcast Receiver • 監聽有興趣的Intent • 利用sendBroadcast()啟動一個廣播,並附上對應參數 • 要於5sec.內完成 • 可啟動特定Activity or Service or 更新畫面 • 例Android系統於電力狀況有變動時, 傳遞一個電力廣播 若我們是一個電力容量顯示程式, 則可接收此廣播, 並顯示於畫面上, 或鈴聲, 或震動 • Demo Code\ demo_BroadcastReceiver • 用DDMS模擬簡訊發送,進行測試 Reference : http://www.cnblogs.com/xirihanlin/archive/2009/08/03/1537402.html
Content Provider • 與其他程式分享資料 • 例 • 存取Contact • content://contacts/people/45 (傳回:聯絡人編號45的聯絡人記錄) • content://contacts/people/ (傳回:全部聯絡人) • Demo : demo code/demo_ContentProvider Reference : http://ysl-paradise.blogspot.com/2008/11/content-provider.html http://blog.sina.com.cn/s/blog_3f7f41d40100cnax.html
上述Android Framework 之下,所帶來的App特色 • 1.應用程式一律平等 (Applications) • http://www.youtube.com/watch?v=3aUjukCdPyQ • 2.應用程式無界限 (Intent filter) • http://www.youtube.com/watch?v=3LkNlTNHZzE • 3.應用程式可輕鬆嵌入網頁 (webView) • http://www.youtube.com/watch?v=Ex7YsQ_YH2U • 4.應用程式可以平行執行 (service 機制) • http://www.youtube.com/watch?v=7lScgyXGxwo Reference : http://www.youtube.com/user/androiddevelopers
Android OS Stack 四大程式元件簡介 Activity Intent Service Broadcast Receiver Content Provider View System簡介 Layouts UI s App權限管理與設定
View是所有UI(Widget)的父類別 http://developer.android.com/intl/zh-TW/reference/android/widget/TextView.html Refer: http://school.brad.tw/mod/resource/view.php?id=384
LayOut-決定UI的排版方式 Reference : Declaring Layout.
LayOut Reference : Declaring Layout.
LayOut • Demo: demo code\demo_ChangeLayOut • Reference: ApiDemo ->Views ->Layouts
View – Widget • 直接與使用者進行互動的View Object • EX: Buttons , checkboxes , EditText ,… • EX: Date Picker , Clock , Zoom Controls • 可以根據需要,在既有的Widget 上建立新的View Object • Ref : Building Custom Components
Auto-Completion Api demo/com.example.android.apis.view