Android应用的基本组件介绍
Android應(yīng)用的基本組件介紹
Activity和View
Activity是Android應(yīng)用中負(fù)責(zé)與用戶交互的組件——大致上可以把它想象成Swing變成中的JFrame控件。不過(guò)它與JFrame的區(qū)別在于:JFrame本身可以設(shè)置布局管理器,不斷地向JFrame中添加組件,但Activity只能通過(guò)setContentView(View)來(lái)顯示指定組件。
View組件是所有UI控件、容器控件的基類,View組件就是Android應(yīng)用中用戶實(shí)實(shí)在在看到的部分。但View組件需要放到容器組件中,或者使用Activity將它顯示出來(lái)。如果需要通過(guò)某個(gè)Activity把指定View顯示出來(lái),調(diào)用Activity的setContentView()方法即可。
setContentView()方法可接受一個(gè)View對(duì)象作為參數(shù),例如如下代碼:
//創(chuàng)建一個(gè)線性布局管理器 LinearLayout layout = new LinearLayout(this); //設(shè)置該Activity顯示layout super.setContentView(layout);上面的程序通過(guò)代碼創(chuàng)建了一個(gè)LinearLayout對(duì)象(它是ViewGroup的子類,ViewGroup又是View的子類),接著調(diào)用Activity的setContentView(layout)把這個(gè)布局管理器顯示出來(lái)。
setContentView()方法也可接受一個(gè)布局管理資源的ID作為參數(shù),例如如下代碼:
從這個(gè)角度來(lái)看,大致上可以把Activity理解成Swing中的JFrame組件。當(dāng)然,Activity可以完成的功能比JFrame更多。
Activity為Android應(yīng)用提供了可視化用戶界面,如果該Android應(yīng)用需要多個(gè)用戶界面,那么這個(gè)Android應(yīng)用將會(huì)包含多個(gè)Activity,多個(gè)Activity組成Activity棧,當(dāng)前活動(dòng)的Activity位于棧頂。
Activity包含了一個(gè)setTheme(int resid)方法來(lái)設(shè)置其窗口的風(fēng)格,例如我們希望窗口不顯示標(biāo)題、以對(duì)話框形式顯示窗口,都可通過(guò)該方法來(lái)實(shí)現(xiàn)。
Service
Service與Activity的地位是并列的,它也代表一個(gè)單獨(dú)的Android組件。Service與Activity的區(qū)別在于:Service通常位于后臺(tái)運(yùn)行,它一般不需要與用戶交互,因此Service組件沒有圖形用戶界面。
與Activity組件需要繼承Activity基類相似,Service組件需要繼承Service基類。一個(gè)Service組件被運(yùn)行起來(lái)之后,它將擁有自己獨(dú)立的生命周期,Service組件通常用于為其他組件提供后臺(tái)服務(wù)或監(jiān)控其他組件的運(yùn)行狀態(tài)。
BroadcastReceiver
BroadcastReceiver是Android應(yīng)用中另一個(gè)重要的組件,顧名思義,BroadcastReceiver代表廣播消息接收器。從代碼實(shí)現(xiàn)角度來(lái)看,BroadcastReceiver非常類似于事件編程中的監(jiān)聽器。與普通事件監(jiān)聽器不同的是:普通事件監(jiān)聽器監(jiān)聽的事件源是程序中的對(duì)象;而BroadcastReceiver監(jiān)聽的事件源是Android應(yīng)用中的其他組件。
使用BroadcastReceiver組件接收廣播消息比較簡(jiǎn)單,開發(fā)者只要實(shí)現(xiàn)自己的BroadcastReceiver子類,并重寫onReceive(Context context, Intent intent)方法即可。當(dāng)其他組件通過(guò)sendBroadcast()、sendStickyBroadcast()或sendOrderedBroadcast()方法發(fā)送廣播消息時(shí),如該BroadcastReceiver也對(duì)該消息“感興趣”(通過(guò)IntentFilter配置),BroadcastReceiver的onReceiver(Context context, Intent intent)方法將會(huì)被觸發(fā)。
開發(fā)者實(shí)現(xiàn)了自己的BroadcastReceiver之后,通常有兩種方式來(lái)注冊(cè)這個(gè)系統(tǒng)級(jí)的“事件監(jiān)聽器”。
- 在Java代碼中通過(guò)Context.registReceiver()方法注冊(cè)BroadcastReceiver。
- 在AndroidManifest.xml文件中使用
ContentProvider
對(duì)于Android應(yīng)用而言,它們必須相互獨(dú)立,各自運(yùn)行在自己的Dalvik虛擬機(jī)實(shí)例中,如果這些Android應(yīng)用之間需要實(shí)現(xiàn)實(shí)時(shí)的數(shù)據(jù)交換。例如我們開發(fā)了一個(gè)發(fā)送短信的程序,當(dāng)發(fā)送短信時(shí)需要從聯(lián)系人管理應(yīng)用中讀取指定聯(lián)系人的數(shù)據(jù)——這就需要多個(gè)應(yīng)用程序之間進(jìn)行實(shí)時(shí)的數(shù)據(jù)交換。
Android系統(tǒng)為這種跨應(yīng)用的數(shù)據(jù)交換提供了一個(gè)標(biāo)準(zhǔn):ContentProvider。當(dāng)用戶實(shí)現(xiàn)自己的ContentProvider時(shí),需要實(shí)現(xiàn)如下抽象方法。
- insert(Uri, ContentValues):向ContentProvider插入數(shù)據(jù)。
- delete(Uri, ContentValues):刪除ContentProvider中指定數(shù)據(jù)。
- update(Uri, ContentValues, String, String[]):更新ContentProvider中指定數(shù)據(jù)。
- query(Uri, String[], String, String[], String):從ContentProvider查詢數(shù)據(jù)。
通常與ContentProvider結(jié)合使用的是ContentResolver,一個(gè)應(yīng)用程序使用ContentProvider暴露自己的數(shù)據(jù),而另一個(gè)應(yīng)用程序則通過(guò)ContentResolver來(lái)訪問(wèn)數(shù)據(jù)。
Intent和IntentFilter
嚴(yán)格地說(shuō),Intent并不是Android應(yīng)用的組件,但它對(duì)于Android應(yīng)用的作用非常大——它是Android應(yīng)用內(nèi)不同組件之間通信的載體。當(dāng)Android運(yùn)行時(shí)需要連接不同的組件時(shí),通常就需要借助于Intent來(lái)實(shí)現(xiàn)。Intent可以啟動(dòng)應(yīng)用中另一個(gè)Activity,也可以啟動(dòng)一個(gè)Service組件,還可以發(fā)送一條廣播消息來(lái)觸發(fā)系統(tǒng)中的BroadcastReceiver。也就是說(shuō),Activity、Service、BroadcastReceiver三種組件之間的通信都以Intent作為載體,只是不同組件使用Intent的機(jī)制略有區(qū)別而已。
- 當(dāng)需要啟動(dòng)一個(gè)Activity時(shí),可調(diào)用Context的startActivity(Intent intent)方法,該方法的Intent參數(shù)封裝了需要啟動(dòng)的目標(biāo)Activity的信息。
- 當(dāng)需要啟動(dòng)一個(gè)Service時(shí),可調(diào)用Context的startService(Intent intent)方法或bindService(Intent service, ServiceConnection conn, int flags)方法,這兩個(gè)方法中的Intent參數(shù)封裝了需要啟動(dòng)的目標(biāo)Service的信息。
- 當(dāng)需要觸發(fā)一個(gè)BroadcastReceiver時(shí),可調(diào)用Context的sendBroadcast(Intent intent)、sendStickyBroadcast(Intent intent)或sendOrderedBroadcast(Intent intent, String receiverPermission)方法來(lái)發(fā)送廣播消息,這三個(gè)方法中的Intent參數(shù)封裝了需要觸發(fā)的目標(biāo)Broadcas的信息。
當(dāng)一個(gè)組件通過(guò)Intent表示了啟動(dòng)或者觸發(fā)另一個(gè)組件的“意圖”之后,這個(gè)意圖可分為兩類。
- 顯式Intent:顯式Intent明確指定需要啟動(dòng)或者觸發(fā)的組件的名稱。
- 隱式Intent:隱式Intent只是指定需要啟動(dòng)或者觸發(fā)的組件應(yīng)滿足怎樣的條件。
對(duì)于顯式Intent而言,Android系統(tǒng)無(wú)須對(duì)該Intent做任何解析,系統(tǒng)直接找到指定的目標(biāo)組件,啟動(dòng)或觸發(fā)它即可。
對(duì)于隱式Intent而言,Android系統(tǒng)需要對(duì)該Intent進(jìn)行解析,解析出它的條件,然后再去系統(tǒng)中查找與之匹配的目標(biāo)條件。如果找到符合條件的組件,就啟動(dòng)或觸發(fā)它們。
那么Android系統(tǒng)如何判斷被調(diào)用組件是否符合隱式Intent呢?這就需要靠IntentFilter來(lái)實(shí)現(xiàn)了,被調(diào)用組件可通過(guò)IntentFilter來(lái)聲明自己所滿足的條件——也就是聲明自己到底能處理哪些隱式Intent。
轉(zhuǎn)載于:https://www.cnblogs.com/zongzhankui/p/5875324.html
總結(jié)
以上是生活随笔為你收集整理的Android应用的基本组件介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JavaScript解析Json字符串
- 下一篇: Android NFC读取电子标签