iT邦幫忙

DAY 12
1

Android 實現智慧生活 DIY系列 第 12

實現智慧家庭diy (Day12) - 為何寫Android APP 不能用 new 來建立 Activity。

  • 分享至 

  • xImage
  •  

Android 有四大AP 元件: Activity, Service, Broadcast Receiver及Content Provider.
Android 以這四種型態來執行AP 的四種行為,也就是說,你的APP可以是這四種裡的任何一種,也可以是一種以上。我們先談這四大嫡系元件的父類Context ,Context這抽象類別,是由Android System實現,在不同使用時機就提供不同AP元件呈現。 當我們需要UI 就用Activity、需要設計自己的背景服務就用 Service,要接收來自系統或其他APP發送的訊息就用Broadcast Receiver,Content Provider 就擔任包裝各種資源的存取介面。

所有文章
http://ithelp.ithome.com.tw/category/家庭雲
有初學習Android的朋友問我,為何他並沒有new Activity物件而能用它。
這是一個很好的問題,以上四大嫡系元件,我們APP開發者無需也無能透過new 指令來建立以上四大Context嫡系元件。

Context 與 四大嫡系元件的實例,都由Android 系統產生,我們只需要用四大嫡系元件的撰寫APP時,只需繼承四大嫡系元件的基礎類別,並擴充成員變數與函式成員即可。Android 系統 會在適當時機建立它們的實例,所謂適當時機是依循它們各自的生命週期狀態。 例如Activity 的生命週期狀態 Create 、 start 、Pause、Destry 等。
以Android 建立 Activity ac01為例,Android System 會先去看 AndroidManifest.xml 宣告檔,這個檔,是Android 要APP開發者,為每個Project準備一個小抄檔,因為Android 的框架在開發階段,不可能知道我們 會取 ac01 這個類名, 因此得由我們的小抄,於 RunTime 階段,提供 ac01 這個類名,讓Android 系統能以此名動態建立 ac01 這個類的實例,如下圖

Android就會找尋它的類定義,在此也就是Activity ac01的定義,如下圖。依此建立它的實例。

在建立 Activity過程中,Android會執行呼叫此Activity的onCreate(),並把自己的參考,當作參數傳遞給APP裡的onCreate()。而這onCreate()也是我們昨天提到的卡榫函式,onCreate 通常用來設定UI 元件的顏色、元件大小等參數值。
凡是四大嫡系元件的實例,皆能透過getContext(),取得Context的參考以執行application-level 的操作,如啟動服務、喚起休息中的 Activity。
以上的說明,是突顯 Context 的重要,誰拿到它( Context), 就能做application-level 的操作。我們明天會示範如何透過 Context 讓Android 裡的WebApplication(Day4-Day6作好的 WAR) 與 一個APK如何 協同合作。

所有文章
http://ithelp.ithome.com.tw/category/家庭雲


上一篇
實現智慧家庭diy (Day11) - 從 Android 輸入法框架, 學習設計Android 框架 API
下一篇
實現智慧家庭diy (Day13) - Android APP 化身為智慧家庭雲的外掛引擎
系列文
Android 實現智慧生活 DIY30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
timloo
iT邦研究生 2 級 ‧ 2012-10-08 09:19:42

patrickcheng提到:
凡是四大嫡系元件的實例,皆能透過getContext(),取得Context的參考以執行application-level 的操作,如啟動服務、喚起休息中的 Activity。
以上的說明,是突顯 Context 的重要,誰拿到它( Context), 就能做applicati...(恕刪)

Activity不用new,要用getContext(),會取回大嫡系元件,怎麼知道是Activity?
還要用as這種語法嗎?

getContext() 是向 Context取得尚方寶劍,見到尚方寶劍,有如皇帝親臨,
所以,是取得Context 參考, 非四大嫡系元件。getContext() 通常在四大嫡系元件內使用。

我要留言

立即登入留言