## Android應用的四大基本組件簡介
Android應用通常由四部分組成,包括:Activity?? Service?? BroadcastReceiver?? ContentProvider;本篇博客將對這四個組件做基本介紹,讓大家對這些組件有一個大致的認識,后面的博客將還會對它們做詳細講解。
1. **Activity**
Activity是android應用中負責與用戶進行交互的的組件,就是我們android手機呈現界面的組件,你可以把它想象成相框,我們android應用呈現的畫面都是在這個相框里面,而這個相框的大小就是我們手機屏幕的大小。他負責呈現畫面給我們用戶,并接受我們用戶的點擊 滑動等一系類響應事件。當我們把android應用要呈現的界面(XML文件)設計好后,然而activity只能通過setContentView(View) 來顯示指定的界面,好比,我們把照片拍好后,選擇用哪個相框來裝載這張照片,因此這樣 來為activity綁定顯示界面。
setContentView(View)的使用一般是下面的形式:
~~~
<span style="font-size:14px;">setContentView(R.layout.main);</span>
~~~
其中的R.layout.main 是android資源文件中的一個布局文件,相當于是相片。
注意的是,實際上Actvity是Window的容器,Activity包含一個getWindow()方法,這個方法返回Activity所包含的窗口,對于Activity,作為開發者的我們是不用關心它的window對象,如果應用程序不用調用Activity的setContentView()方法來設置該activity的顯示界面,那么該應用將顯示一個空的窗口。
一個android應用包含很多個Activity,多個activity組成activity棧,存儲方式為先進后出,就像箱子里面放書一樣,先放進去的書放在最下面,最后放進去的在最上面,所以當前運行的activity位于棧頂。
還有一點就是我們Activity可以設計它自身的風格,就是主題,使用setTheme(int resouceId)就可以指定activity的使用風格,比如有些時候我們的activity不需要使用actionBar? 或者以對話框的形式顯示,就可以使用這個方法實現,也可以在AndroidManifest.xml指定activity的顯示風格。
2.**Service**
**Service可以說**? 是和activity一樣重要的,它只是沒有顯示界面而已,service通常運行在后臺,因為沒有界面顯示,所以一般不需要與用戶進行交互。
Service組件需要繼承Service基類,Service運行之后擁有自己獨立的生命周期,Service組件通常是用于為其他組件提供后臺服務,或者監聽其他組件的運行狀態。其中典型的應用就是 音樂播放器,首頁是activity呈現給用戶的界面,后臺播放音樂有Service來完成,Service播放了多少秒然后通知Activity更新界面。Activity的播放暫停按鈕被用戶點擊了,然后通知Service停止或播放音樂。
3.? **BroadcastReceiver**
**BroadcastReceiver 是 android 應用** 中一個非常重要的組件,根據這個名字,大家肯定知道了它其實就是廣播消息接收器,與普通的監聽器不同的是:普通的監聽器監聽的事件源氏程序中的對象,而BroadcastReceiver監聽的事件源是Android應用中的其他組件(activity? receiver)。
使用broadcastReceiver組件接受廣播消息比較簡單,我們只需要實現自己的BroadcatReceiver子類,并重寫onRecerver(Context context,Intent intent)方法即可。當其他組件通過sendBroadcast()? 或者sentStickyBroadcast() 或者sentOrderBroadcast()方法發送廣播消息時,如果該BroadcastReceiver對這個消息感興趣,通過IntentFilter配置(這是一個過濾器,設置一些條件,如果某個消息和這些條件匹配,則激活BroadcastReceiver),BroadcastReceiver的onReceive()方法就會被激活,這個方法中設置的一些動作就會被執行。就像Service中播放音樂播放完了之后,它就通過sendBroadcast()向activity發送消息,activity收到消息后,就會執行BroadcastReceiver中的onReceive()中的方法,activity就會在界面上做出相應的界面更新。
BroadcastReceiver有兩種注冊方式,只有注冊之后才能啟動,否則是不會有消息發送和接收的。如下兩種方法:
??????????? (1).? 在java代碼中通過Context.registReceiver()方法注冊BroadcastReceiver;
??????????? (2).??在AndroidManifest.xml中使用<receiver.../>元素完成注冊;
??????? 這里只對BroadcastReceiver做簡短介紹,后面的博客中將會對它進行詳細講解,并教會大家怎樣開發和使用它。
?????
4.? **ContentProvider**
對于Android應用程序,它們是單獨運行在自己的Dalvik虛擬機實例中,如果這些Android應用之間需要進行實時的數據交換,則需要contentProvider來完成這個工作,當要獲取手機聯系人時,就會用到它;
ContentProvider是Android系統為跨應用的數據交換的一個標準,當用戶實現自己的ContentProvider的時候,要實現它的以后4個方法:
????????? (1) insert(Uri, ContentValues):向ContentProvider插入數據;
??????????(2) delete(Uri, ContentValues):刪除contentProvider中指定的數據;
??????????(3) update(Uri,ContentValues,String,String[ ]):更新ContentProvider中指定的ContentProvider;
????????? (4) query(Uri, String[ ], String ,String[ ],String): 從ContentResolver查詢數據;
?? 通常使用ContentProvider時都會結合使用ContentResolver,一個應用程序來暴露自己的數據給外界,而另一個程序則通過ContentResolver來訪問數據;
5.**Intent 和 IntentFilter**
**intent在android 應 用 程序** 中的地位非常之高,作用非常之大。它是Android應用程序內部不同組件之間通信的載體。當android運行時需要鏈接不同的組件時,就需要Intent來實現。Intent可以啟動一個Activity,也可以啟動一個Service,也可以通過發送廣播消息來觸發系統中的BroadcastReceiver。也就是說,intent是Activity,Service,BroadcastReceiver 這3個組件之間通信的載體,只是它們使用Intent的方式機制有些不同罷了。
??????? (1)當需要啟動一個activity時,可調用Context的startActivity(Intent intent)或者 startActivityForResult(Intent intent,int requestCode)方法,這兩個方法中的intent都封裝了需要啟動的目標activity的信息;
????????(2)當需要啟動一個Service時,可調用Context的startService(Intent intent)或者bindService(Intent service, ServiceConnection conn,int flags)方法,這兩個方法中的intent都封裝了需要啟動的目標service的信息;
??????? (3)當需要觸發一個BroadcastReceiver時,可調用Context的sendBroadcast(Intent intent)?或 sendStickyBroadcast(Intent intent) 或 sendOrderBroadcast(Intent intent,String receiverPermission) 方法來發送廣播消息,這三個方法中的intent封裝了需要觸發的目標BroadcastReceiver 的信息;
通過上面的介紹,可以看出,Intent封裝了當前組件需要啟動或觸發的目標的信息,然而Intent分為兩類:
?????????(1)? 顯示 Intent :顯示Intent明確指定需要啟動或者觸發的組件的類名;
?????????(2)? 隱示 Intent:隱示Intent只是指定了需要啟動啟動或者觸發的組件需要應滿足怎樣的條件;
?????????? 對于顯示Intent,Android系統無需對該Intent做任何解析,系統直接找到指定的目標組件,啟動會觸發它即可;
???????????對于隱示Intent,Android系統需要對該Intent進行解析,解析出它的條件,然后去系統中查找與之匹配的目標組件。如果有滿足條件的組件就啟動或觸發它。
??????????隱示Intent通過IntentFilter來實現的,被調用組件可以通過IntentFilter來聲明自己所滿足的條件,就是聲明自己到底能處理哪些Intent。Intent和IntentFilter有很多內容,后面的博客會做詳細介紹。本次博客就介紹這么多。
???????????
?????????????????
- 前言
- viewpager
- 實現橫向listview(HorizontalListview)
- SimpleAdapter的使用
- 自定義android圓形ImageView
- 如何解決listView或scrollView+viewpager手勢沖突的問題
- EditText怎樣設置成下劃線
- Android中Display及DisplayMetrics理解
- android開發小經驗總結
- listView動態影藏顯現列表項中的多項部分
- Android開發中怎樣使用cookieManager來管理cookie
- 學習Android從0開始之背景篇-Android系統介紹
- 學習Android從0開始之開發工具篇-Android studio詳解
- 學習Android從0開始之基礎篇(1)-Android的四大基本組件
- 學習Android從0開始之基礎篇(2)-AndroidMainfest.xml文件詳解
- 學習Android從0開始之基礎篇(3)-視圖組件之布局管理器
- 學習Android從0開始之基礎篇(4)-TextView與EditText