天天看點

Android開發的四大元件

 Android 開發的四大元件分别是:活動(activity),用于表現功能;服務(service),背景運作服務,不提供界面呈現;廣播接受者(Broadcast Receive),勇于接收廣播;内容提供者(Content Provider),支援多個應用中存儲和讀取資料,相當于資料庫。

1.活動

Android中,activity是所有程式的根本,所有程式的流程都運作在activity之中,activity可以算是開發者遇到的最頻繁,也是android當中最基本的子產品之一。在android的程式中,activity一般代表手機螢幕的一屏。如果把手機比作一個浏覽器,那麼activity就相當于一個網頁。在activity當中可以添加一些Button、Checkbox等控件,可以看到activity概念和網頁的概念相當類似。

一般一個android應用是由多個activity組成的,這多個activity之間可以進行互相跳轉。例如,按下一個Button按鈕後,可能會跳轉到其他的activity,與網頁跳轉稍微有點不一樣的是,activity之間的跳轉有可能傳回值。例如,從activity A跳轉到activity B,那麼當activity B運作結束時,有可能會給activity A一個傳回值。這樣做在很多時候是相當友善的。

當打開一個新的螢幕時,之前一個螢幕會被置為暫停狀态,并且壓入曆史堆棧中。使用者可以通過回退操作傳回到以前打開過的螢幕。可以選擇性的一處一些沒有必要保留的螢幕,因為Android會把每個應用的開始到目前的每個螢幕儲存在堆棧中。

2.服務

Service是android系統中的一種元件,跟activity的級别差不多,但是他不能自己運作,隻能背景運作,并且可以和其他元件進行互動。Service是沒有界面長生命周期的代碼。Service是一種程式,可以運作很長時間的,但是卻沒有使用者界面。這麼說有點枯燥,來看個例子。打開一個音樂播放器的程式,這時如果想上網,那麼打開Android浏覽器,這時雖然已經進入浏覽器這個程式,但是歌曲播放并沒有停止,而是在背景繼續一首接一首的播放,其實這個播放就是由播放音樂的Service進行控制。當然這個播放音樂的Service也可以停止。例如,當播放清單裡的歌曲都結束,或使用者按下了停止音樂播放的快捷鍵等。Service可以在很多場合的應用中使用,如播放多媒體時使用者啟動了其他Activity,這時程式要在背景繼續播放,比如檢測SD卡上檔案的變化,或在背景記錄地理資訊位置的改變等,而服務卻藏在背景。

開啟Service有兩種方式:

(1)Context.starService():Service會經曆onCreat  ——>onStar(如果Service還沒有運作,則Android先調用onCreat(),然後調用onStar(),是以一個Service的onStar方能會重複調用多次);如果是調用者自己直接退出而沒有調用StopService,服務會一直在背景運作。該服務的調用者再啟動起來後可以通過stopService關閉服務。注意,多次調用Context.starService()不會被嵌套(即使會有相應的onStar()方法被調用),是以無論同一個服務被啟動多少次,一旦調用Context.stopService()或者StopSelf(),都會被停止。

說明:傳遞給starService()的Intent對象會傳遞給onStar()方法。調用順序為onCreat——onStar(可調用多次)——onDestroy.

(2)Context.bindService():服務會經曆onCreate()——onBind(),onBind将傳回給用戶端一個IBind接口執行個體,IBind允許用戶端回調服務的方法,比如得到服務運作的狀态或其他操作。這個時候把調用者(Context,如Activity)會和服務綁定在一起,Context退出了,服務就會調用onUnbind——onDestroy相應退出,所謂綁定在一起就是“共存亡”了。

3.廣播接收器

在Android中,廣播是一種廣泛運用的在應用程式之間傳輸資訊的機制。而廣播接收器是對發送出來的廣播進行過濾接受并響應的一類元件。可以使用廣播接收器來讓應用對一個外部時間做出響應。例如,當電話呼入這個外部事件到來時,可以利用廣播接收器進行處理。當下載下傳一個程式成功完成時,仍然可以利用廣播接收器進行處理。廣播接收器不NotificationManager來通知使用者這些事情發生了。廣播接收器既可以在AndroidManifest.xml中注冊,也可以在運作時的代碼中使用Context.registerReceive()進行注冊。隻要是注冊了,當事件來臨時,即使程式沒有啟動,系統也在需要的時候啟動程式。各種應用還可以通過使用Context.sendBroadcast()将它們自己的Intent廣播給其他應用程式。

4.内容提供者

内容提供者(Content Provider)是Android提供的第三方應用資料的通路方案。

在Android中,對資料的保護是很嚴密的,除了放在SD卡中的資料,一個應用所持有的資料庫、檔案等内容,都是不允許其他直接通路的。Android當然不會真的把每一個應用都做成一座“孤島”,它為所有應用都準備可一扇窗,這就是Content Provider。應用想對外提供的資料,可以通過派生Content Provider類,封裝成一枚Content Provider。每個Content Provider都用一個uri作為獨立的辨別,形如:content://com.xxxxx。所有應用看着像REST的樣子,但實際上它比REST更為靈活。和REST類似,uri也可以有兩種類型,一種是帶id的;另一種是清單的,但實作者不需要按照這個模式來做,給id的uri也可以傳回清單類型的資料。

歡迎加入技術學習交流群:364595326

上一篇: PHP技術基礎
下一篇: html convert pdf