Andoid學(xué)習(xí)路(二)

圖片發(fā)自簡(jiǎn)書App

前面寫了四大組件的Activity,稍微詳細(xì)的描述了它的生命周期和啟動(dòng)模式。今天接著寫其余的三大組件Service、BroadcastReceiver、ContentProvider.

1.Service

Service是 Android 中實(shí)現(xiàn)程序后臺(tái)運(yùn)行的解決方案,它非常適合用于去執(zhí)行那些不需要和用戶交互而且還要求長(zhǎng)期運(yùn)行的任務(wù)。服務(wù)的運(yùn)行不依賴于任何用戶界面,即使當(dāng)程序被切換到后臺(tái),或者用戶打開(kāi)了另外一個(gè)應(yīng)用程序,服務(wù)仍然能夠保持正常運(yùn)行。不過(guò)需要注意的是,服務(wù)并不是運(yùn)行在一個(gè)獨(dú)立的進(jìn)程當(dāng)中的,而是依賴于創(chuàng)建服務(wù)時(shí)所在的應(yīng)用程序進(jìn)程。當(dāng)某個(gè)應(yīng)用程序進(jìn)程被殺掉時(shí),所有依賴于該進(jìn)程的服務(wù)也會(huì)停止運(yùn)行。

Service的啟動(dòng)過(guò)程從ContextWrapper的startService開(kāi)始。在ContextImpl中,startService方法調(diào)用startServiceCommen方法,而startServiceCommen方法會(huì)通過(guò)ActivityManagerNative.getDefault()這個(gè)對(duì)象來(lái)啟動(dòng)一個(gè)服務(wù)。

服務(wù)的使用,通常情況下,如果我們希望服務(wù)一旦啟動(dòng)就立刻去執(zhí)行某個(gè)動(dòng)作,就可以將邏輯寫在onStartCommand()方法里。而當(dāng)服務(wù)銷毀時(shí),我們應(yīng)該在 onDestroy()方法中去回收那些不再使用的資源。另外需要注意,每一個(gè)服務(wù)都需要在 AndroidManifest.xml 文件中進(jìn)行注冊(cè)才能生效

2.BroadcastReceiver

Android 中的廣播主要可以分為兩種類型,標(biāo)準(zhǔn)廣播和有序廣播。

標(biāo)準(zhǔn)廣播(Normal broadcasts)是一種完全異步執(zhí)行的廣播,在廣播發(fā)出之后,所有的廣播接收器幾乎都會(huì)在同一時(shí)刻接收到這條廣播消息,因此它們之間沒(méi)有任何先后順序可言。這種廣播的效率會(huì)比較高,但同時(shí)也意味著它是無(wú)法被截?cái)嗟摹?/p>

有序廣播(Ordered broadcasts)則是一種同步執(zhí)行的廣播,在廣播發(fā)出之后,同一時(shí)刻只會(huì)有一個(gè)廣播接收器能夠收到這條廣播消息,當(dāng)這個(gè)廣播接收器中的邏輯執(zhí)行完畢后,廣播才會(huì)繼續(xù)傳遞。所以此時(shí)的廣播接收器是有先后順序的,優(yōu)先級(jí)高的廣播接收器就可以先收到廣播消息,并且前面的廣播接收器還可以截?cái)嗾趥鬟f的廣播,這樣后面的廣播接收器就無(wú)法收到廣播消息了。

廣播的使用方法,首先要定義廣播接收者,只需要繼承BroadcastReceiver并重寫onReceive方法就可以了。需要注意的是定義好了廣播接收者還需要注冊(cè)廣播接收者,可以在AndroidManifest文件中靜態(tài)注冊(cè),也可以通過(guò)代碼動(dòng)態(tài)注冊(cè)。動(dòng)態(tài)注冊(cè)的廣播需要在合適的時(shí)機(jī)采用unregisterReceiver進(jìn)行解注冊(cè)。

3.ContentProvider

內(nèi)容提供器(Content Provider)主要用于在不同的應(yīng)用程序之間實(shí)現(xiàn)數(shù)據(jù)共享的功能,它提供了一套完整的機(jī)制,允許一個(gè)程序訪問(wèn)另一個(gè)程序中的數(shù)據(jù),同時(shí)還能保證被訪數(shù)據(jù)的安全性。目前,使用內(nèi)容提供器是 Android 實(shí)現(xiàn)跨程序共享數(shù)據(jù)的標(biāo)準(zhǔn)方式。

對(duì)于每一個(gè)應(yīng)用程序來(lái)說(shuō),如果想要訪問(wèn)內(nèi)容提供器中共享的數(shù)據(jù),就一定要借助ContentResolve 類,可以通過(guò) Context 中的 getContentResolver()方法獲取到該類的實(shí)例。ContentResolver 中提供了一系列的方法用于對(duì)數(shù)據(jù)進(jìn)行 CRUD 操作,其中 insert()方法用于添加數(shù)據(jù),update()方法用于更新數(shù)據(jù),delete()方法用于刪除數(shù)據(jù),query()方法用于查詢數(shù)據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,540評(píng)論 19 139
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 12,356評(píng)論 6 13
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,941評(píng)論 25 709
  • 人生中遇到了這么一時(shí)刻,好像進(jìn)退皆由你,結(jié)果你也好像都明白。駐足了很久,你該怎么做。
    七月上的冥王星閱讀 210評(píng)論 0 0
  • 小寶今天是第四天去上學(xué)了,今天由我送去,一直哭著說(shuō):“我不去讀書了,我要回去。”……到了幼兒園哭得更大聲,似乎用盡...
    艾蘭英子閱讀 517評(píng)論 0 0

友情鏈接更多精彩內(nèi)容