顯示具有 Component 標籤的文章。 顯示所有文章
顯示具有 Component 標籤的文章。 顯示所有文章

星期二, 8月 23, 2011

激活組件

Android應用程式筆記

四種組件中的三種組件activities、services和broadcast receivers可以受不同步訊息intent激活,intent與組件在運行時彼此綁定,不管這個組件是屬於你的應用程式或者其他應用程式。

intent由Intent類別產生,Intent類別定義激活特定組件或者特定類型組件的消息,一個intent可以是明確的也可以是隱含的。

對於activities與services,intent定義一些行為去激活,例如"view"或者"send"一些東西,且可能指定資料的URI去激活。例如intent傳遞要求給activity,讓activty顯示圖片或者開啟網頁。在一些案例中,你可以啟動activty接收結果,以此為例,這個activity也可用intent回傳結果,例如你可以發出一個intent讓使用者選個人聯絡人回傳給你,回傳的intent包含一個指向所選定聯絡人的URI。

對於broadcast receivers,intent簡單定義公告當作廣播,例如標明裝置電池為低電量的廣播只包含"battery is low"的已知操作字串。

其他組件型態,content provider,不會被intent激活。而從ContentResolver來的要求才會激活content provider。content resolver處理所有與content provider的直接交易,所以用provider執行交易的組件不需要呼叫ContentResolver方法。這留下一層content provider與組件之間要求訊息的抽象層。

以下有激活各個組件不同的方法:

  • 你可以傳遞intent到startActivity()或者startActivityForResult()(如果你希望activty回傳結果)來啟動activty(或給他一些新的任務去做)。
  • 你可以傳遞intent到startService()來啟動service(或給正在進行的service新指令)。或者你可以傳遞intent到bindService()來綁定service。
  • 你可以傳遞intent到sendBroadcast()、sendOrderedBroadcast()或者sendStickyBroadcast()來初始一個廣播。
  • 你可以呼叫ContentResolver上的query()執行查詢content provider。



星期一, 8月 22, 2011

組件

Android應用程式筆記


Android應用程式組件是在建置應用程式相當重要的元素,系統可以通過不同組件進入應用程式,並不是所有組件都有給使用者進入應用程式實際方式,而是依靠其他組件,每一個組件擁有各自獨特的功能幫助建置應用程式的行為。

Android有四種不同的應用程式組件,每一組建有分明的功能和生命週期,以下是四種組件的簡單介紹:

Activities
一個activity顯示一個使用者介面。例如電子郵件應用程式可能會有一個activity顯示所有未閱讀的電子郵件,另一個activity顯示撰寫電子郵件,另一個activity顯示閱讀電子郵件。雖然這些activities一起運作拚合成使用者使用電子郵件應用程式的經驗,但是activity之間是互相獨立的。其他應用程式也可以啟動電子郵件應用程式中的任何一個activity,只要電子郵件應用程式允許。例如攝影應用程式啟動電子郵件應用程式中的撰寫新郵件的activity,去分享攝影的圖片。
Services
一個service是運行在後台執行長時間運行的服務或為遠端執行續執行的組件。service不提供使用者介面,因此使用者並不能直接使用service組件。例如service可能是當使用者使用不同應用程式時在後台播放音樂的service組件,或者可能是不會干擾使用者與activity互動下從網路取得資料的service組件。其他的組件可以啟動service或者綁定service與它互動。
Content providers
一個content provide管理一組應用程式分享的資料。我們可以將資料存在檔案系統、SQLite資料庫、網路上、或者任何應用程式可以存取的本地持久性存儲,透過content provider可以查詢或者甚至修改資料。例如andoird系統提供一個content provider管理使用者聯絡人的資訊,因此任何有適合權限的應用程式都可以查詢content provider的部分去讀寫聯絡人資訊。
content provier也可用來讀寫應用程式私有不分享的資料,例如Note Pad應用程式使用content provider存下筆記。
Broadcast receivers
Broadcast receiver組件負責回應全系統廣播的公告。許多廣播來自系統,如廣播公告螢幕即將被關閉、電量過低、或者圖片被截取。應用程式也可以初始廣播,如通知其他應用程式知道有一些資料已經下載到裝置,它們可以使用了。雖然broadcast不會顯示使用者介面,他們可以當廣播事件發生時創造狀態列警告去告知使用者。更常見地,broadcast receiver是到其他組件的一種"管道"。

Android系統設計的獨特方面是任何應用程式可以啟動其他應用程式的組件。例如如果你希望使用者用攝影裝置擷取一張相片,有可能其他應用程式可以做到,然後你的應用程式可以使用它來代替自己開發一個activity去擷取相片,你無須合併或甚至連接來自攝影機應用程式的程式碼。反而你可以簡單啟動在攝影機應用程式的activity去擷取相片。當完成擷取後,相片回傳到你的應用程式使用。對於使用者,這樣的方式攝影機似乎就是你的應用程式的一部份。

當系統啟動組件時,系統為應用程式啟動執行續及實作組件需要的類別。例如你的應用程式啟動在攝影機應用程式中的activity去擷取相片,那個activity運行在攝影機應用程式之下,並不是在你的應用程式執行續中。因此,不像其他大部分的應用程式,android應用程式沒有單一進入點(沒有main()方式)。

因為系統運行每一個應用程式於個別有檔案權限的執行續中以限制存取其他應用程式,你的應用程式無法直接激活其他應用程式的組件。然而android系統可以,所以激活其他應用程式的組件,你必須傳送訊息給系統,並指定你的intent給特定組件,然後系統幫你激活其他組件。

感謝大家閱讀,如有錯誤歡迎指教,謝謝。