一、activity
二、service
三、broadcast receiver
四、content provider
乙個 activity 的啟動順序:
oncreate()——>onstart()——>onresume()
當aactivity啟動bactivity的生命週期
a -> onpause()
b ->oncreate(),onstart(),onresume()
此時b才完全覆蓋a
這時a->onstop()
broadcast是一種廣泛運用的在應用程式之間傳輸資訊的機制。而broadcastreceiver是對傳送出來的 broadcast進行過濾接受並響應的一類元件。
在androidmanifest.xml
中用標籤註冊,並在標籤內用標籤設定過濾器。
//繼承broadcastreceiver,重寫onreceiver方法
//使用過濾器,接收指定action廣播
一般:在onstart中註冊,onstop中取消unregisterreceiver
intentfilter intentfilter = new intentfilter();
intentfilter.addaction(string); //為broadcastreceiver指定action,使之用於接收同action的廣播
registerreceiver(broadcastreceiver,intentfilter);//註冊
intent intent = new intent(actionstring);//指定廣播action:
intent.putextra("msg", "我通過廣播傳送訊息了");//通過intent攜帶訊息
context.sendbroadcast(intent );//傳送廣播訊息
(1)兩種註冊方式均不設定優先順序
未設定優先順序的情況下,先動態後靜態
(2)將動態優先順序設定為最低-1000,靜態優先順序設定為最高1000
動態仍先於靜態被接收到
靜態廣播1(優先順序為200),靜態廣播2(優先順序為300),靜態廣播3(優先順序為400),靜態廣播優先順序為(-100),動態廣播優先順序為0。
出現順序由優先順序決定,由高到低分別為靜態3-靜態2-靜態1-動-靜態。
廣播接收器註冊一共有兩種形式:靜態註冊和動態註冊.
兩者及其接收廣播的區別:
(1)動態註冊廣播不是常駐型廣播,也就是說廣播跟隨activity的生命週期。注意在activity結束前,移除廣播接收器。
靜態註冊是常駐型,也就是說當應用程式關閉後,如果有資訊廣播來,程式也會被系統呼叫自動執行。
(2)當廣播為有序廣播時:優先順序高的先接收(不分靜態和動態)。同優先順序的廣播接收器,動態優先於靜態
(3)同優先順序的同類廣播接收器,靜態:先掃瞄的優先於後掃瞄的,動態:先註冊的優先於後註冊的。
(4)當廣播為預設廣播時:無視優先順序,動態廣播接收器優先於靜態廣播接收器。同優先順序的同類廣播接收器,靜態:先掃瞄的優先於後掃瞄的,動態:先註冊的優先於後冊的。
service 是在一段不定的時間執行在後台,不和使用者互動應用元件。
service 和其他的應用元件一樣,執行在程序的主線程中。這就是說如果
service 需要很多耗時或者阻塞的操作,需要在其子執行緒中實現
採用context.startservice()方法啟動服務,在服務未被建立時,系統會先呼叫服務的oncreate()方法,接著呼叫onstart()方法。如果呼叫startservice()方法前服務已經被建立,多次呼叫startservice()方法並不會導致多次建立服務,但會導致多次呼叫onstart()方法。採用startservice()方法啟動的服務,只能呼叫context.stopservice()方法結束服務,服務結束時會呼叫ondestroy()方法。
採用context.bindservice()方法啟動服務,在服務未被建立時,系統會先呼叫服務的 oncreate()方法,接著呼叫onbind()方法。這個時候呼叫者和服務繫結在一起,呼叫者退出了,系統就會先呼叫服務的onunbind()方 法,接著呼叫ondestroy()方法。如果呼叫bindservice()方法前服務已經被繫結,多次呼叫bindservice()方法並不會導致 多次建立服務及繫結(也就是說oncreate()和onbind()方法並不會被多次呼叫)。如果呼叫者希望與正在繫結的服務解除繫結,可以呼叫 unbindservice()方法,呼叫該方法也會導致系統呼叫服務的onunbind()-->ondestroy()方法。
service 有繫結模式和非繫結模式,以及這兩種模式的混合使用方式。不同的使用方法生命週期
方法也不同。
非 綁 定 模 式 : 當 第 一 次 調 用 startservice 的 時 候 執 行 的 方 法 依 次 為 oncreate() 、
onstartcommand(),當 service 關閉的時候呼叫 ondestory 方法。
繫結模式:第一次 bindservice()的時候,執行的方法為 oncreate()、onbind()解除繫結的
時候會執行 onunbind()、ondestory()。
上面的兩種生命週期是在相對單純的模式下的情形。我們在開發的過程中還必須注意 service 實
例只會有乙個,也就是說如果當前要啟動的 service 已經存在了那麼就不會再次建立該 service 當然
也不會呼叫 oncreate()方法。
乙個 service 可以被多個客戶進行繫結,只有所有的繫結物件都執行了 onbind()方法後該
service 才會銷毀,不過如果有乙個客戶執行了 onstart()方法,那麼這個時候如果所有的 bind 客戶
都執行了 unbind()該 service 也不會銷毀。
contentprovider管理android以結構化方式存放的資料。他以相對安全的方式封裝資料並且提供簡易的處理機制。content provider提供不同程序間資料互動的標準化介面。保證被訪問資料的安全性。內容提供器可以選擇只對哪一部分資料進行共享,從而保證我們程式中的隱私資料不會有洩漏的風險。
android 中對資料操作包含有:
file, sqlite3, preferences, contectresolver 與 contentprovider 前三
種資料操作方式都只是針對本應用內資料,程式不能通過這三種方法去操作別的
應用內的資料。
android 中提供 contectresolver 與 contentprovider 來操作別的應用程式
的資料。
乙個應用實現 contentprovider 來提供內容給別的應用來操作,
乙個應用通過 contentresolver 來操作別的應用資料,當然在自己的應用中
也可以當外部應用需要對 contentprovider 中的資料進行新增、刪除、修改和查詢
操作時,可以使用 contentresolver 類來完成,要獲取 contentresolver 物件,
可以使用 context 提供的 getcontentresolver()方法。
uri 指定了將要操作的 contentprovider,其實可以把乙個 uri 看作是乙個
**,我們把 uri 分為三部分。
第一部分是"content://"。可以看作是**中的"http://"。
第二部分是主機名或 authority,用於唯一標識這個 contentprovider,外
部應用需要根據這個標識來找到它。可以看作是**中的主機名,比如
"blog.csdn.net"。
第三部分是路徑名,用來表示將要操作的資料。可以看作**中細分的內容
路徑
Android基礎之Android四大元件
android系統四大元件分別是activity service content provider和broadcast receiver。1.activity 乙個activity通常就是乙個螢幕 2.service 在後台執行,完成應用指定邏輯操作,為應用提供服務 3.broadcast rece...
物件導向三(四)大特性之 抽象
定義 1.抽象類就是不能建立物件的類 2.抽象方法就是沒有方法體的方法。使用abstract關鍵字修飾乙個類,這個類就是抽象類 public abstract class shape 抽象方法,就是沒有方法體的方法 public abstract void test 3.繼承抽象類的子類必須重寫抽象...
android 四大元件
1.activity 2.service 3.contentprovider 應用中的資料,對外進行共享,其它應用可以通過內容提供者,可以訪問到你應用中的資料,對資料進行增刪改查 1 對不同的資料格式,統一了檔案格式和資料訪問api 2 內容提供者要繼承contentprovider類 3 在清單檔...