活動
Android 中,Activity是所有程序的根本,所有程序的流程都運行在Activity 之中,Activity可以算是開發(fā)者遇到的最頻繁,也是Android 當中最基本的模塊之一。在Android的程序當中,Activity 一般代表手機屏幕的一屏。如果把手機比作一個瀏覽器,那么Activity就相當于一個網頁。在Activity 當中可以添加一些Button、Check box 等控件。可以看到Activity 概念和網頁的概念相當類似。
一般一個Android 應用是由多個Activity 組成的。這多個Activity 之間可以進行相互跳轉,例如,按下一個Button按鈕后,可能會跳轉到其他的Activity。和網頁跳轉稍微有些不一樣的是,Activity 之間的跳轉有可能返回值,例如,從Activity A 跳轉到Activity B,那么當Activity B 運行結束的時候,有可能會給Activity A 一個返回值。這樣做在很多時候是相當方便的。
當打開一個新的屏幕時,之前一個屏幕會被置為暫停狀態(tài),并且壓入歷史堆棧中。用戶可以通過回退操作返回到以前打開過的屏幕??梢赃x擇性的移除一些沒有必要保留的屏幕,因為Android會把每個應用的開始到當前的每個屏幕保存在堆棧中。
服務
Service 是android 系統(tǒng)中的一種組件,它跟Activity 的級別差不多,但是他不能自己運行,只能后臺運行,并且可以和其他組件進行交互。Service 是沒有界面的長生命周期的代碼。Service是一種程序,它可以運行很長時間,但是它卻沒有用戶界面。這么說有點枯燥,來看個例子。打開一個音樂播放器的程序,這個時候若想上網了,那么,打開Android瀏覽器,這個時候雖然已經進入了瀏覽器這個程序,但是,歌曲播放并沒有停止,而是在后臺繼續(xù)一首接著一首的播放。其實這個播放就是由播放音樂的Service進行控制。當然這個播放音樂的Service也可以停止,例如,當播放列表里邊的歌曲都結束,或者用戶按下了停止音樂播放的快捷鍵等。Service 可以在和多場合的應用中使用,比如播放多媒體的時候用戶啟動了其他Activity這個時候程序要在后臺繼續(xù)播放,比如檢測SD 卡上文件的變化,再或者在后臺記錄地理信息位置的改變等等,總之服務嘛,總是藏在后頭的。
開啟Service有兩種方式:
(1) Context.startService():Service會經歷onCreate -> onStart(如果Service還沒有運行,則android先調用onCreate()然后調用onStart();如果Service已經運行,則只調用onStart(),所以一個Service的onStart方法可能會重復調用多次 );StopService的時候直接onDestroy,如果是調用者自己直接退出而沒有調用StopService的話,Service會一直在后臺運行。該Service的調用者再啟動起來后可以通過stopService關閉Service。 注意,多次調用Context.startservice()不會嵌套(即使會有相應的onStart()方法被調用),所以無論同一個服務被啟動了多少次,一旦調用Context.stopService()或者StopSelf(),他都會被停止。補充說明:傳遞給StartService(0的Intent對象會傳遞給onStart()方法。調用順序為:onCreate --> onStart(可多次調用) --> onDestroy。
(2) Context.bindService():Service會經歷onCreate() -->onBind(),onBind將返回給客戶端一個IBind接口實例,IBind允許客戶端回調服務的方法,比如得到Service運行的狀態(tài)或其他操作。這個時候把調用者(Context,例如Activity)會和Service綁定在一起,Context退出了,Srevice就會調用onUnbind --> onDestroyed相應退出,所謂綁定在一起就共存亡了。
廣播接收器
在Android 中,Broadcast是一種廣泛運用的在應用程序之間傳輸信息的機制。而BroadcastReceiver 是對發(fā)送出來的Broadcast進行過濾接受并響應的一類組件??梢允褂肂roadcastReceiver 來讓應用對一個外部的事件做出響應。這是非常有意思的,例如,當電話呼入這個外部事件到來的時候,可以利用BroadcastReceiver 進行處理。例如,當下載一個程序成功完成的時候,仍然可以利用BroadcastReceiver 進行處理。BroadcastReceiver不能生成UI,也就是說對于用戶來說不是透明的,用戶是看不到的。BroadcastReceiver通過NotificationManager 來通知用戶這些事情發(fā)生了。BroadcastReceiver 既可以在AndroidManifest.xml 中注冊,也可以在運行時的代碼中使用Context.registerReceiver()進行注冊。只要是注冊了,當事件來臨的時候,即使程序沒有啟動,系統(tǒng)也在需要的時候啟動程序。各種應用還可以通過使用Context.sendBroadcast () 將它們自己的Intent Broadcasts廣播給其他應用程序。
內容提供
Content Provider 是Android提供的第三方應用數(shù)據(jù)的訪問方案。
在Android中,對數(shù)據(jù)的保護是很嚴密的,除了放在SD卡中的數(shù)據(jù),一個應用所持有的數(shù)據(jù)庫、文件等內容,都是不允許其他直接訪問的。Andorid當然不會真的把每個應用都做成一座孤島,它為所有應用都準備了一扇窗,這就是Content Provider。應用想對外提供的數(shù)據(jù),可以通過派生Content Provider類, 封裝成一枚Content Provider,每個Content Provider都用一個uri作為獨立的標識,形如:content://com.xxxxx。所有東西看著像REST的樣子,但實際上,它比REST 更為靈活。和REST類似,uri也可以有兩種類型,一種是帶id的,另一種是列表的,但實現(xiàn)者不需要按照這個模式來做,給id的uri也可以返回列表類型的數(shù)據(jù),只要調用者明白,就無妨,不用苛求所謂的REST。