android四大基本元件分別是activity,service服務,content provider內容提供者,broadcastreceiver廣播接收器。
這裡看到了熟悉的activity,之前寫過一篇關於activity的文章,那這裡就不重複詳細介紹了。
下面簡述四大元件的功能:
service服務
乙個service 是一段長生命週期的,沒有使用者介面的程式,可以用來開發如監控類程式。需要再mainfest中進行註冊。
1/service使用步驟如下
2/生命週期:1/繼承service類
服務不能自己執行,需要通過contex.startservice()或contex.bindservice()啟動服務
通過startservice()方法啟動的服務於呼叫者沒有關係,即使呼叫者關閉了,服務仍然執行想停止服務要呼叫context.stopservice(),此時系統會呼叫ondestory(),使用此方法啟動時,服務首次啟動系統先呼叫服務的oncreate()–>onstart(),如果服務已經啟動再次呼叫只會觸發onstart()方法
使用bindservice()啟動的服務與呼叫者繫結,只要呼叫者關閉服務就終止,使用此方法啟動時,服務首次啟動系統先呼叫服務的oncreate()–>onbind(),如果服務已經啟動再次呼叫不會再觸發這2個方法,呼叫者退出時系統會呼叫服務的onunbind()–>ondestory(),想主動解除繫結可使用contex.unbindservice(),系統依次呼叫onunbind()–>ondestory();
broadcastreceiver廣播接收器
廣播接收器起的作用其實就是像訊息通知時指示燈會閃爍一樣,捕捉你感興趣的內容,並能夠給你反饋。
1/ 廣播型別:
普通廣播2/ 廣播註冊:通過context.sendbroadcast(intent myintent)傳送的
有序廣播
通過context.sendorderedbroadcast(intent, receiverpermission)傳送的,該方法第2個引數決定該廣播的級別,級別數值是在 -1000 到 1000 之間 ,
值越大 ,級越高;廣播接收者接收廣播時的級別級別(可通過intentfilter中的priority進行設定設為2147483647時優先順序最高),同級別接收的先後是隨機的,
再到級別低的收到廣播,高階別的或同級別先接收到廣播的可以通過abortbroadcast()方法截斷廣播使其他的接收者無法收到該廣播,還有其他建構函式
非同步廣播
通過context.sendstickybroadcast(intent myintent)傳送的,還有
initialdata, initialextras)方法,該方法具有有序廣播的特性也有非同步廣播的特性;傳送非同步廣播要: android:name=」android.permission.broadcast_sticky」 />許可權,接收並處理完intent後,廣播依然存在,直到你呼叫removestickybroadcast(intent)
主動把它去掉
注意:傳送廣播時的intent引數與contex.startactivity()啟動起來的intent不同,前者可以被多個訂閱它的廣播接收器呼叫,後者只能被乙個(activity或service)呼叫
廣播註冊有兩種方法:
靜態註冊:在mainfest中宣告:
".smsbroadcastreceiver" >
"2147483647" >
"android.provider.telephony.sms_received" />
動態註冊:在activity中onresume宣告:
intentfilter intentfilter=new intentfilter("android.provider.telephony.sms_received");
registerreceiver(mbatteryinforeceiver ,intentfilter);
//反註冊
unregisterreceiver(receiver);
注意:
系統常見廣播intent,如開機啟動、電池電量變化、時間改變等廣播
content provider
(1)android平台提供了content provider使乙個應用程式的指定資料集提供給其他應用程式。其他應用可以通過contentresolver類從該內容提供者中獲取或存入資料。androidmanifest檔案中進行註冊格式(2)只有需要在多個應用程式間共享資料是才需要內容提供者。例如,通訊錄資料被多個應用程式使用,且必須儲存在乙個內容提供者中。它的好處是統一資料訪問方式。
(3)contentprovider實現資料共享。contentprovider用於儲存和獲取資料,並使其對所有應用程式可見。這是不同應用程式間共享資料的唯一方式,因為android沒有提供
所有應用共同訪問的公共儲存區。
(4)開發人員不會直接使用contentprovider類的物件,大多數是通過contentresolver物件實現對contentprovider的操作。
(5)contentprovider使用uri來唯一標識其資料集,這裡的uri以content://作為字首,表示該資料由contentprovider來管理。
(6) 需要再mainfest中進行註冊
元素的name 屬性指定了實現了這個activity 的activity 的子類。icon 和label 屬性指向了包含展示給使用者的此activity 的圖示和標籤的資源檔案。
元素用於宣告服務
元素用於宣告廣播接收器
元素用於宣告內容提供者
4大元件的啟用
• 容提供者的啟用:當接收到contentresolver 發出的請求後,內容提供者被啟用。而其它三種元件──activity、服務和廣播接收器被一種叫做intent 的非同步訊息所啟用
• activity的啟用通過傳遞乙個intent 物件至context.startactivity()或activity.startactivityforresult()以載入(或指定新工作給)乙個activity。相應的activity 可以通過呼叫getintent() 方法來檢視啟用它的intent。如果它期望它所啟動的那個activity 返回乙個結果,它會以呼叫startactivityforresult()來取代startactivity()。比如說,如果它啟動了另外乙個activity 以使使用者挑選一張**,它也許想知道哪張**被選中了。結果將會被封裝在乙個intent 物件中,並傳遞給發出呼叫的activity 的onactivityresult() 方法。
• 服務的啟用可以通過傳遞乙個intent 物件至context.startservice()或context.bindservice()前者android 呼叫服務的onstart()方法並將intent 物件傳遞給它,後者android 呼叫服務的onbind()方法將這個intent 物件傳遞給它
• 傳送廣播可以通過傳遞乙個intent 物件至給context.sendbroadcast() 、
context.sendorderedbroadcast()或context.sendstickybroadcast()android 會呼叫所有對此廣播有興趣的廣播接收器的onreceive()方法,將intent 傳遞給它們
安卓四大基本元件
android四大基本元件 activity,service服務,content provider內容提供者,broadcastreceiver廣播接收者。一 activity 就是我們通常說的乙個螢幕或視窗 1 生命週期 七個方法,三個生命週期 2 呼叫宣告週期的方法 1 按home鍵 2 和開啟...
了解android四大元件
源於 android四大元件分別為activity service content provider broadcast receiver。一 android四大元件詳解 1 activity 活動 1 乙個 activity 通常就是乙個 單獨的螢幕 視窗 2 activity 之間通過inten...
四大元件(四) content provider
content provider相當於是程式與程式之間的介面。讓原本不可能通訊的程式,通過內容提供者這個橋梁變得可以通訊。定義乙個類 繼承 contentprovider public class backdoor extends contentprovider 註冊contentprovider ...