Android這四個你不可不知的知識點,你都了解多少?

那些你不一定知道的Android知識N系列...


Android的四大組件

  • Activity (活動)
  • Service (服務(wù))
  • Content provider(內(nèi)容提供器)
  • BroadCast Recevicer(廣播)

Activity (活動)

體現(xiàn)

你所看到APP里每個單獨的窗口基本上都是Activity。

通信

Activity之間傳輸數(shù)據(jù)利用的是Intent組件間通信。

使用

必須在AndroidManifest.xml配置文件中聲明,系統(tǒng)才能識別到Activity。


Service (服務(wù))

體現(xiàn)

Service主要用于后臺,協(xié)助完成應(yīng)用的指定任務(wù)。

使用

  • 必須在AndroidManifest.xml配置文件中以<service></service>標簽聲明全部的Service。
  • Service狀態(tài)分為兩種:


  • Service通常位于后臺運行,并沒有UI界面,Service必須要繼承Service基類,Service通常用來提供后臺服務(wù)和監(jiān)控其他組件運行狀態(tài)。

Content provider(內(nèi)容提供器)

體現(xiàn)

  • Content Provider使一個應(yīng)用程序的指定數(shù)據(jù)集提供給其他應(yīng)用程序。其他應(yīng)用可以通過ContentResolver類從該內(nèi)容提供者中獲取或存入數(shù)據(jù),可以理解為應(yīng)用之間內(nèi)容交換的中間人
  • 只有在多個應(yīng)用間需要共享數(shù)據(jù)的時候,內(nèi)容提供者才有體現(xiàn)價值。如,通訊錄的內(nèi)容被多個應(yīng)用獲?。≦Q、微信、支付寶等),且必須存儲在一個內(nèi)容提供者中。它的好處是統(tǒng)一數(shù)據(jù)訪問方式。
  • ContentProvider實現(xiàn)數(shù)據(jù)共享。ContentProvider用于保存和獲取數(shù)據(jù),并使其對所有應(yīng)用程序可見。這是不同應(yīng)用程序間共享數(shù)據(jù)的唯一方式,因為android沒有提供所有應(yīng)用共同訪問的公共存儲區(qū)。

使用

  • 開發(fā)人員大多數(shù)是通過ContentResolver對象實現(xiàn)對ContentProvider的操作,不會直接使用。
  • ContentProvider使用URI來唯一標識其數(shù)據(jù)集,這里的URI以content://作為前綴,表示該數(shù)據(jù)由ContentProvider來管理。

BroadCast Recevicer(廣播)

體現(xiàn)

  • 廣播的主要作用是,將應(yīng)用不感興趣的外部事件直接過濾掉,打比方,WIFI斷開的提醒可以利用廣播讓你的應(yīng)用進行接收并響應(yīng)。
  • 廣播雖然沒有UI界面,但可以啟動一個Activity或Service來響應(yīng)它收到的消息,或者用NotificationManager來通知用戶。
  • 通知提醒可以用很多種方法,閃光燈閃爍、震動、播放聲音等等,一般來說可以直接在狀態(tài)欄上放一個明顯通知圖標,用戶就可以打開查看消息了。
  • 廣播注冊分為兩種:


使用

廣播接收者的注冊有兩種方法,分別是動態(tài)注冊和AndroidManifest文件中進行靜態(tài)注冊。


四大組件總結(jié)

注冊

  • 4個組件基本上都要注冊才能使用。
  • Activity、service、Content Provider需要在AndroidManifest文件中進行配置。
  • AndroidManifest文件中未進行聲明的activity、服務(wù)以及內(nèi)容提供者將不為系統(tǒng)所見,從而也就不可用。
  • 而broadcast receiver廣播接收者的注冊分靜態(tài)注冊(在AndroidManifest文件中進行配置)和通過代碼動態(tài)創(chuàng)建并以調(diào)用Context.registerReceiver()的方式注冊至系統(tǒng)。
  • 需要注意的是在AndroidManifest文件中進行配置的廣播接收者會隨系統(tǒng)的啟動而一直處于活躍狀態(tài),只要接收到感興趣的廣播就會觸發(fā)(即使程序未運行)。

激活使用

  • 內(nèi)容提供者的激活:當接收到ContentResolver發(fā)出的請求后,內(nèi)容提供者被激活。
  • activity、服務(wù)和廣播接收器被一種叫做intent的異步消息所激活。

關(guān)閉

  • 內(nèi)容提供者僅在響應(yīng)ContentResolver提出請求的時候激活。而一個廣播接收器僅在響應(yīng)廣播信息的時候激活。所以,沒有必要去顯式的關(guān)閉這些組件。
  • Activity關(guān)閉:可以通過調(diào)用它的finish()方法來關(guān)閉一個activity。
  • Service關(guān)閉:對于通過startService()方法啟動的服務(wù)要調(diào)用Context.stopService()方法關(guān)閉服務(wù),使用bindService()方法啟動的服務(wù)要調(diào)用Context.unbindService()方法關(guān)閉服務(wù)。

額外知識

任務(wù)

  • 任務(wù)其實就是activity的棧,它由一個或多個Activity組成,共同完成一個完整的用戶體驗。
  • 棧底的是啟動整個任務(wù)的Activity,棧頂?shù)氖钱斍斑\行的用戶可以交互的Activity,當一個activity啟動另外一個的時候,新的activity就被壓入棧,并成為當前運行的activity。
  • 而前一個activity仍保持在棧之中。當用戶按下BACK鍵的時候,當前activity出棧,而前一個恢復(fù)為當前運行的Activity。
  • 棧中保存的其實是對象,棧中的Activity永遠不會重排,只會壓入或彈出。
  • 任務(wù)中的所有activity是作為一個整體進行移動的。整個的任務(wù)(即activity棧)可以移到前臺,或退至后臺。
  • Android系統(tǒng)是一個多任務(wù)(Multi-Task)的操作系統(tǒng),可以在用手機聽音樂的同時,也執(zhí)行其他多個程序。每多執(zhí)行一個應(yīng)用程序,就會多耗費一些系統(tǒng)內(nèi)存,當同時執(zhí)行的程序過多,或是關(guān)閉的程序沒有正確釋放掉內(nèi)存,系統(tǒng)就會覺得越來越慢,甚至不穩(wěn)定。
  • 為了解決這個問題,Android引入了一個新的機制,即生命周期(Life Cycle)。

陳皮仔技術(shù)專欄:
|CSDN:https://blog.csdn.net/Mr_Lester
|簡書:http://m.itdecent.cn/u/2c67d6b3badc
|掘金:https://juejin.im/user/5e7423dd5188254935094193/posts
|知乎:https://www.zhihu.com/people/chenpizai/posts

關(guān)注 "陳皮仔" 公眾號,回復(fù)關(guān)鍵字"皮友java教程",即可獲得無價之寶--->java教程,從此青銅到王者不是夢!


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

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

  • 2.1 Activity 2.1.1 Activity的生命周期全面分析 典型情況下的生命周期:在用戶參與的情況下...
    AndroidMaster閱讀 3,299評論 0 8
  • 一 Activity 1 Activity 生命周期 1.1 Activity 的四種狀態(tài) running 當前...
    _執(zhí)_念__閱讀 10,789評論 0 91
  • 面試題總結(jié) 通用 安卓學習途徑, 尋找資料學習的博客網(wǎng)站 AndroidStudio使用, 插件使用 安卓和蘋果的...
    JingBeibei閱讀 1,892評論 2 21
  • 0.Android手機操作系統(tǒng)的四層架構(gòu)? Applications , Application Framewor...
    lucas777閱讀 8,176評論 0 16
  • Java基礎(chǔ) 什么是重載,什么是重寫?有什么區(qū)別?重載(Overload):(1)Overloading是一個類中...
    勤息嘻嘻嘻閱讀 702評論 0 1

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