01 Android應用的構成 四大組件 Activity, Intent Receiver , Service , Content Provider

來源:互聯網
上載者:User

對於一個Android應用程式來說,是由四種構造塊組織而成的,這四種構造塊如下:

但是,並不是每一個Android應用程式都需要這四種構造塊,這不是必須的,某些時候,我們只需要這四種中的幾種組合成我們的應用。

1、Activity

       Activity是Android構造塊中最基本的一種,在應用中,一個activity通常就是一個單獨的螢幕。每一個activity都被實現為一個獨立的類,並且繼承於Activity這個基類。這個activity類將會顯示由幾個Views控制項組成的使用者介面,並對事件做出響應。大部份的應用都會包含多個的螢幕。例如,一個短訊息應用程式將會有一個螢幕用於顯示連絡人清單第二個螢幕用於寫短訊息,同時還會有用於瀏覽舊短訊息及進行系統設定的螢幕。每一個這樣的螢幕,就是一個activity。從一個螢幕導航另一個螢幕是很簡單的。在一些應用中,一個螢幕甚至會傳回值給前一個螢幕。

當一個新的螢幕開啟後,前一個螢幕將會暫停,並儲存在曆史堆棧中。使用者可以返回到曆史堆棧中的前一個螢幕。當螢幕不再使用時,還可以從曆史堆棧中刪除。預設情況下,Android將會保留從主畫面到每一個應用的運螢幕。

Android使用了Intent這個特殊類,實現在屏與屏之間移動。。Intent類用於描述一個應用將會做什麼事。在Intent的描述結構中,有兩個最重要的部分:動作和動作對應的資料。典型的動作類型有:MAIN(activity的門戶)、VIEW、PICK、EDIT等。而動作對應的資料則以URI的形式進行表示。例如:要查看一個人的連絡方式,你需要建立一個動作類型為VIEWintent,以及一個表示這個人的URI。

   與之有關係的一個類叫IntentFilter。相對於intent是一個有效做某事的請求,一個intent filter則用於描述一個activity(或者Intent Receiver)能夠操作哪些intent。一個activity如果要顯示一個人的連絡方式時,需要聲明一個IntentFilter,這個IntentFilter要知道怎麼去處理VIEW動作和表示一個人的URI。IntentFilter需要在AndroidManifest.xml定義

   通過解析各種intent,從一個螢幕導航到另一個螢幕是很簡單的。當向前置航時,activity將會調用startActivity(Intent myIntent)方法。然後,系統會在所有安裝的應用程式中定義的IntentFilter中尋找,找到最匹配myIntent的Intent對應的activity。新的activity接收到myIntent的通知後,開始運行。當startActivity方法被調用將觸發解析myIntent的動作,這個機制提供了兩個關鍵好處:

    A、Activities能夠重複利用從其它組件中以Intent的形式產生的一個請求;

    B、Activities可以在任何時候被一個具有相同IntentFilter的新的Activity取代。

2、Intent Receiver

intent-receiver可以看成是
activity的代理,或者是輸入事件型的service,是事件來了就處理,且很快能處理完,

    當你希望你的應用能夠對一個外部的事件(如當電話呼入時,或者資料網路可用時,或者到了晚上時)做出響應,你可以使用一個Intent Receiver。雖然Intent Receiver在感興趣的事件發生時,會使用NotificationManager通知使用者,但它並不能產生一個UI。Intent Receiver在AndroidManifest.xml中註冊,但也可以在代碼中使用Context.registerReceiver()進行註冊。當一個intent receiver被觸發時,你的應用不必對請求調用intent
receiver,系統會在需要的時候啟動你的應用。各種應用還可以通過使用Context.broadcastIntent()將它們自己的intent receiver廣播給其它應用程式。


那intent究竟是什麼呢?

    上面我們提到過,activity是相互獨立,一般他們是獨立進程。但是剛才提到的面向服務需求又要求各個activity有高頻率的互動,這個怎麼解決。這個解決方案就是使用intent.

其實我們可以將intent看成是activity通訊的標準的。比如Intent中的內容 告訴了系統激發intent的activity需要什麼服務,服務者activity應該滿足的條件。然後就是android系統的事了,它負責找出符合 條件的activity服務者,並將intent給activity服務者,然後這個acitivity根據intent中剩餘的資訊做出相應的操作。

由上面可知,intent包含兩部分資訊:

1.       activity服務者的資訊,這個是給android用來找到合適activity的。

2.       activity服務者要做什麼操作的資訊,這個是給activity服務者用的。

我們就以android內建notepad執行個體程式來說這個過程;  參考網址
http://li53262182.blog.163.com/blog/static/1283933872009822105031577/


3、Service而service只是service是長生命週期的,往
往需要長時間運行,通常為多個activity服務,正因為這個,他們的資源回收優先順序也不同。既然activity,intent-
reciever,service都用到intent ,那我們來說說intent。

    一個Service是一段長生命週期的,沒有使用者介面的程式。比較好的一個例子就是一個正在從播放清單中播放歌曲的媒體播放器。在一個媒體播放器的應用中,應該會有多個activity,讓使用者可以選擇歌曲並播放歌曲。然而,音樂重放這個功能並沒有對應的activity,因為使用者當然會認為在導航到其它螢幕時音樂應該還在播放的。在這個例子中,媒體播放器這個activity會使用Context.startService()來啟動一個service,從而可以在後台保持音樂的播放。同時,系統也將保持這個service一直執行,直到這個service運行結束。另外,我們還可以通過使用Context.bindService()方法,串連到一個service上(如果這個service還沒有運行將啟動它)。當串連到一個service之後,我們還可以service提供的介面與它進行通訊。拿媒體播放器這個例子來說,我們還可以進行暫停、重播等操作。

4、Content Provider

    應用程式能夠將它們的資料儲存到檔案中、SQL資料庫中,甚至是任何有效裝置中。當你想將你的應用資料與其它的應用共用時,Content Provider將會很有用。一個Content Provider類實現了一組標準的方法,從而能夠讓其它的應用儲存或讀取此Content Provider處理的各種資料類型。

    更詳細的Content Provider資料,可以參考附帶文檔中的Accessing Content Providers。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.