Android之四大元件、六大布局、五大儲存
一.四大元件:
四大元件分別為activity、service、content provider、broadcast receiver。
一、android四大元件詳解
1、activity
(1)一個Activity通常就是一個單獨的螢幕(視窗)。
(2)Activity之間通過Intent進行通訊。
(3)android應用中每一個Activity都必須要在AndroidManifest.xml
2、service
(1)service用於在後臺完成使用者指定的操作。service分為兩種:
(a)started(啟動):當應用程式元件(如activity)呼叫startService()方法啟動服務時,服務處於started狀態。
(b)bound(繫結):當應用程式元件呼叫bindService()方法繫結到服務時,服務處於bound狀態。
(2)startService()與bindService()區別:
(a)started service(啟動服務)是由其他元件呼叫startService()
(b)使用bindService()方法啟用服務,呼叫者與服務繫結在了一起,呼叫者一旦退出,服務也就終止,大有“不求同時生,必須同時死”的特點。
(3)開發人員需要在應用程式配置檔案中宣告全部的service,使用<service></service>標籤。
(4)Service
3、content provider
(1)android平臺提供了Content Provider使一個應用程式的指定資料集提供給其他應用程式。其他應用可以通過ContentResolver類從該內容提供者中獲取或存入資料。
(2)只有需要在多個應用程式間共享資料是才需要內容提供者。例如,通訊錄資料被多個應用程式使用,且必須儲存在一個內容提供者中。它的好處是統一資料訪問方式。
(3)ContentProvider實現資料共享。ContentProvider用於儲存和獲取資料,並使其對所有應用程式可見。這是不同應用程式間共享資料的唯一方式,因為android沒有提供所有應用共同訪問的公共儲存區。
(4)開發人員不會直接使用ContentProvider類的物件,大多數是通過ContentResolver物件實現對ContentProvider的操作。
(5)ContentProvider使用URI來唯一標識其資料集,這裡的URI以content://作為字首,表示該資料由ContentProvider來管理。
4、broadcast receiver
(1)你的應用可以使用它對外部事件進行過濾,只對感興趣的外部事件(如當電話呼入時,或者資料網路可用時)進行接收並做出響應。廣播接收器沒有使用者介面。然而,它們可以啟動一個activity或serice來響應它們收到的資訊,或者用NotificationManager來通知使用者。通知可以用很多種方式來吸引使用者的注意力,例如閃動背燈、震動、播放聲音等。一般來說是在狀態列上放一個持久的圖示,使用者可以開啟它並獲取訊息。
(2)廣播接收者的註冊有兩種方法,分別是程式動態註冊和AndroidManifest檔案中進行靜態註冊。
(3)動態註冊廣播接收器特點是當用來註冊的Activity關掉後,廣播也就失效了。靜態註冊無需擔憂廣播接收器是否被關閉,只要裝置是開啟狀態,廣播接收器也是開啟著的。也就是說哪怕app本身未啟動,該app訂閱的廣播在觸發時也會對它起作用。
二、android四大元件總結:
(1)4大元件的註冊
4大基本元件都需要註冊才能使用,每個Activity、service、Content Provider都需要在AndroidManifest檔案中進行配置。AndroidManifest檔案中未進行宣告的activity、服務以及內容提供者將不為系統所見,從而也就不可用。而broadcast receiver廣播接收者的註冊分靜態註冊(在AndroidManifest檔案中進行配置)和通過程式碼動態建立並以呼叫Context.registerReceiver()的方式註冊至系統。需要注意的是在AndroidManifest檔案中進行配置的廣播接收者會隨系統的啟動而一直處於活躍狀態,只要接收到感興趣的廣播就會觸發(即使程式未執行)。
(2)4大元件的啟用
內容提供者的啟用:當接收到ContentResolver發出的請求後,內容提供者被啟用。而其它三種元件activity、服務和廣播接收器被一種叫做intent的非同步訊息所啟用。
(3)4大元件的關閉
內容提供者僅在響應ContentResolver提出請求的時候啟用。而一個廣播接收器僅在響應廣播資訊的時候啟用。所以,沒有必要去顯式的關閉這些元件。Activity關閉:可以通過呼叫它的finish()方法來關閉一個activity。服務關閉:對於通過startService()方法啟動的服務要呼叫Context.stopService()方法關閉服務,使用bindService()方法啟動的服務要呼叫Contex.unbindService()方法關閉服務。
(4)android中的任務(activity棧)
(a)任務其實就是activity的棧,它由一個或多個Activity組成,共同完成一個完整的使用者體驗。棧底的是啟動整個任務的Activity,棧頂的是當前執行的使用者可以互動的Activity,當一個activity啟動另外一個的時候,新的activity就被壓入棧,併成為當前執行的activity。而前一個activity仍保持在棧之中。當用戶按下BACK鍵的時候,當前activity出棧,而前一個恢復為當前執行的activity。棧中儲存的其實是物件,棧中的Activity永遠不會重排,只會壓入或彈出。
(b)任務中的所有activity是作為一個整體進行移動的。整個的任務(即activity棧)可以移到前臺,或退至後臺。
(c)Android系統是一個多工(Multi-Task)的作業系統,可以在用手機聽音樂的同時,也執行其他多個程式。每多執行一個應用程式,就會多耗費一些系統記憶體,當同時執行的程式過多,或是關閉的程式沒有正確釋放掉記憶體,系統就會覺得越來越慢,甚至不穩定。為了解決這個問題,Android引入了一個新的機制,即生命週期(Life Cycle)。二.六大布局:
Android六大介面佈局方式:
宣告Android程式佈局有兩種方式:
1) 使用XML檔案描述介面佈局;
2) 在Java程式碼中通過呼叫方法進行控制。
我們既可以使用任何一種宣告介面佈局的方式,也可以同時使用兩種方式。
使用XML檔案宣告有以下3個特點:
- 1) 將程式的表現層和控制層分離;
- 2) 在後期修改使用者介面時,無須更改程式的源程式;
- 3) 可通過WYSIWYG視覺化工具直接看到所設計的使用者介面,有利於加快介面設計的過程。
建議儘量採用XML檔案宣告介面元素佈局。在程式執行時動態新增介面佈局會大大降低應用響應速度,但依然可以在必要時動態改變螢幕內容。
六大介面佈局方式包括: 線性佈局(LinearLayout)、框架佈局(FrameLayout)、表格佈局(TableLayout)、相對佈局(RelativeLayout)、絕對佈局(AbsoluteLayout)和網格佈局(GridLayout) 。
1. LinearLayout線性佈局
LinearLayout容器中的元件一個挨一個排列,通過控制android:orientation屬性,可控制各元件是橫向排列還是縱向排列。
LinearLayout的常用XML屬性及相關方法
XML屬性 | 相關方法 | 說明 |
---|---|---|
android:gravity | setGravity(int) | 設定佈局管理器內元件的對齊方式 |
android:orientation | setOrientation(int) | 設定佈局管理器內元件的排列方式,可以設定為horizontal、vertical兩個值之一 |
其中,gravity屬性支援top, left, right, center_vertical, fill_vertical, center_horizontal, fill_horizontal, center, fill, clip_vertical, clip_horizontal。也可以同時指定多種對齊方式的組合。
LinearLayout子元素支援的常用XML屬性及方法
XML屬性 | 說明 |
---|---|
android:layout_gravity | 指定該子元素在LinearLayout中的對齊方式 |
android:layout_weight | 指定子元素在LinearLayout中所佔的權重 |
2. TableLayout表格佈局
TableLayout繼承自Linearout,本質上仍然是線性佈局管理器。表格佈局採用行、列的形式來管理UI元件,並不需要明確地宣告包含多少行、多少列,而是通過新增TableRow、其他元件來控制表格的行數和列數。
每向TableLayout中新增一個TableRow就代表一行;
每向TableRow中新增一個一個子元件就表示一列;
如果直接向TableLayout新增元件,那麼該元件將直接佔用一行;
在表格佈局中,可以為單元格設定如下三種行為方式:
- Shrinkable:該列的所有單元格的寬度可以被收縮,以保證該表格能適應父容器的寬度;
- Strentchable:該列所有單元格的寬度可以被拉伸,以保證元件能完全填滿表格空餘空間;
- Collapsed:如果該列被設定為Collapsed,那麼該列的所有單元格會被隱藏;
TableLayout的常用XML屬性及方法
XML屬性 | 相關方法 | 說明 |
---|---|---|
android:collapseColumns | setColumns(int, boolean) | 設定需要被隱藏的列的序號,多個序號間用逗號分隔 |
android:shrinkColumns | setShrinkAllColumns(boolean) | 設定需要被收縮的列的序號 |
android:stretchColumns | setStretchAllColumns(boolean) | 設定允許被拉伸的列的序號 |
3. FrameLayout幀佈局
FrameLayout直接繼承自ViewGroup元件。幀佈局為每個加入其中的元件建立一個空白的區域(稱為一幀),每個子元件佔據一幀,這些幀會根據gravity屬性執行自動對齊。
FrameLayout的常用XM了屬性及方法
XML屬性 | 相關方法 | 說明 |
---|---|---|
android:foreground | setForeground(Drawable) | 設定該幀佈局容器的前景影象 |
android:foregroundGravity | setForeGroundGraity(int) | 定義繪製前景影象的gravity屬性 |
4. RelativeLayout相對佈局
RelativeLayout的XML屬性及相關方法說明
XML屬性 | 相關方法 | 說明 |
---|---|---|
android:gravity | setGravity(int) | |
android:ignoreGravity | setIgnoreGravity(int) | 設定哪個元件不受gravity屬性的影響 |
為了控制該佈局容器的各子元件的佈局分佈,RelativeLayout提供了一個內部類:RelativeLayout.LayoutParams。
RelativeLayout.LayoutParams裡只能設為boolean的XML屬性
XML屬性 | 說明 |
---|---|
android:layout_centerHorizontal | 設定該子元件是否位於佈局容器的水平居中 |
android:layout_centerVertical | |
android:layout_centerParent | |
android:layout_alignParentBottom | |
android:layout_alignParentLeft | |
android:layout_alignParentRight | |
android:layout_alignParentTop |
RelativeLayout.LayoutParams裡屬性值為其他UI元件ID的XML屬性
XML屬性 | 說明 |
---|---|
android:layout_toRightOf | 控制該子元件位於給出ID元件的右側 |
android:layout_toLeftOf | |
android:layout_above | |
android:layout_below | |
android:layout_alignTop | |
android:layout_alignBottom | |
android:layout_alignRight | |
android:layout_alignLeft |
5. Android 4.0新增的網格佈局GridLayout
GridLayout是Android4.0增加的網格佈局控制元件,與之前的TableLayout有些相似,它把整個容器劃分為rows × columns個網格,每個網格可以放置一個元件。效能及功能都要比tablelayout好,比如GridLayout佈局中的單元格可以跨越多行,而tablelayout則不行,此外,其渲染速度也比tablelayout要快。
GridLayout提供了setRowCount(int)和setColumnCount(int)方法來控制該網格的行和列的數量。
GridLayout常用的XML屬性和方法說明
XML屬性 | 相關方法 | 說明 |
---|---|---|
android:alignmentMode | setAlignmentMode(int) | 設定該佈局管理器採用的對齊模式 |
android:columnCount | setColumnCount(int) | 設定該網格的列數量 |
android:columnOrderPreserved | setColumnOrderPreserved(boolean) | 設定該網格容器是否保留序列號 |
android:roeCount | setRowCount(int) | 設定該網格的行數量 |
android:rowOrderPreserved | setRowOrderPreserved(boolean) | 設定該網格容器是否保留行序號 |
android:useDefaultMargins | setUseDefaultMargins(boolean) | 設定該佈局管理器是否使用預設的頁邊距 |
為了控制GridLayout佈局容器中各子元件的佈局分佈,GridLayout提供了一個內部類:GridLayout.LayoutParams,來控制Gridlayout佈局容器中子元件的佈局分佈。
GridLayout.LayoutParams常用的XML屬性和方法說明
XML屬性 | 說明 |
---|---|
android:layout_column | 設定該元件在GridLayout的第幾列 |
android:layout_columnSpan | 設定該子元件在GridLayout橫向上跨幾列 |
android:layout_gravity | 設定該子元件採用何種方式佔據該網格的空間 |
android:layout_row | 設定該子元件在GridLayout的第幾行 |
android:layout_rowSpan | 設定該子元件在GridLayout縱向上跨幾行 |
6. AbsoluteLayout絕對佈局
即Android不提供任何佈局控制,而是由開發人員自己通過X座標、Y座標來控制組件的位置。每個元件都可指定如下兩個XML屬性:
- layour_x;
- layout_y;
相關推薦
Android之四大元件、六大布局、五大儲存
一.四大元件: 四大元件分別為activity、service、content provider、b
Android——四大元件、六大布局、五大儲存
一.android四大元件 (一)android四大元件詳解 Android四大元件分別為activity、service、content provider、broadcast receiver。 1、activity &n
Android四大元件、六大布局、五大儲存
Android四大元件分別為activity、service、content provider、broadcast receiver。 一、android四大元件詳解 1、activity (1)一個Activity通常就是一個單獨的螢幕(視窗)。 (2)Activi
Android四大元件、五大儲存、六大布局、七大生命週期、八大基本資料型別
四大元件:Activity、BroadcastReceive、Service、Content Provider ;五大儲存: SharedPreferences、SDCard 、SQLite資料庫儲存資
Android之四大元件(2)(Service)
一、Service是android的四大元件,於activity最相似,於activity的區別在於,service一直執行在後臺,它沒有介面,所以絕不可能跑到前臺,一旦service被啟動起來,它就有它自己的額生命週期。service是四大元件,也是需要到androidManifest.xml檔案
Android之四大元件
應用程式元件是一個Android應用程式的基本構建塊。這些元件由應用清單檔案鬆耦合的組織。AndroidManifest.xml描述了應用程式的每個元件,以及他們如何互動。 Android中稱為四大元件的為別為:Activity、Service、BroadCast Recevicer、Conte
Android之四大元件(Service的開啟與關閉)
個人開發的微信小程式,目前功能是書籍推薦,後續會完善一些新功能,希望大家多多支援! 前言 服務(Service)是Android系統中的四大元件之一。服務主要用於兩個目的:後臺執行和跨程序訪問。通過啟動 一個服務,可以在不顯示介面的前提下在後臺執行指定的
Android 四大控制元件,五大儲存,六大布局
一.四大元件: 四大元件分別為activity、service、content provider、broadcast receiver。 1、activity (1)一個Activity通常就是一個單獨的螢幕(視窗)。 (2)Act
Android 四大元件,五大儲存,六大布局
Android 四大元件 android四大元件分別是:Activity, service,content provider,broadcast receiver 一、Activity 1、概念: android 中,Activity 相當於一個頁面,可以在Ac
Android 六大布局之 LinearLayout(線性佈局)
LinearLayout( 線性佈局) 檢索 Android 中有六大布局: LinearLayout(線性佈局),RelativeLayout(相對佈局),TableLayout(表格佈局) FrameLayout(幀佈局),AbsoluteLayout(絕對佈局),Gr
android開發之merge結合include優化布局
ted com match clas you title example ews 文件的 merge結合include優化android布局,效果不知道。個人感覺使用上也有非常大的局限。只是還是了解一下。記錄下來。 布局文件都要有根節點,但androi
Android入門——六大布局詳解
本博文對LinearLayout、RelativeLayout、自定義ViewGroup、FrameLayout、TableLayout、AbsoluteLayout六種佈局進行詳細的講解。 一.LinearLayout佈局 <?xml version="1.0" encodin
Android基礎——四大元件之Activity
1.Activity >概念:活動面板 應用程式元件 可以繪製Ui介面 可以和使用者進行互動 預設展示全屏 其他情況 介面比其他視窗小 懸浮在其他視窗上方 >建立一個Activity >1,建立
Android基礎之四大元件-詳解Service
1 介紹 Service是android的一種機制。Service是執行在後臺的程式碼,不能與使用者互動,可以執行在自己的程序,也可以執行在其他應用程式的上下文裡。需要通過某一個Activity或其他Context物件來呼叫。 1.1 Servic
Android外掛化原理和實踐 (六) 之 四大元件解決方案
在前面的幾篇文章中已經介紹完了Android外掛化的第一和第二個根本問題,就是宿主和外掛的程式碼互相呼叫問題和外掛中資源的讀取問題。現剩下的就是Android外掛化裡最麻煩的第三個根本問題,也就是在外掛中使用四大元件的問題。我們知道,目前外掛中的四大元件要想正常使用就必須要在宿主中的Androi
Android基礎知識之四大元件Activity(五)Activity生命週期場景的應用
今天,來寫一個關於Android四大元件Activity生命週期的一個簡單應用,做一個關於極簡單的音樂播放器(只是為了鞏固一下Activity的生命週期,並不能當作專案來用)。 先來截個介面的圖: 很簡單吧,只有三個按鈕,播放一首歌,但來研究Activity的生命週期,這
Android Studio:四大元件之Service
一.服務基本上分為兩種形式: 啟動 當應用元件(如 Activity)通過呼叫 startService() 啟動服務時,服務即處於“啟動”狀態。一旦啟動,服務即可在後臺無限期執行,即使啟動服務的元件已被銷燬也不受影響。 已啟動的服務通常是執行單一操作
Android筆記---四大元件之Broadcast Receive廣播接收器詳解
廣播(Broadcast)是一種廣泛運用的在應用程式之間傳輸資訊的機制,在 Android 裡面有各種各樣的廣播,比如電池的使用狀態,電話的接收和簡訊的接收都會產生一個廣播,應用程式也可以接受廣播並做出程式邏輯上的處理, 比如我們需要讓應用程式開機自動啟動,其實
Android入門——四大元件之Activity啟動模式
standrad singleTop singleTask singleInstance 在AndroidManifest.xml中通過中設定 <activity android:name=".MainActivity" android:l
Android六大布局
Android開發佈局:.xml 頁面排版 佈局由佈局管理器(佈局樣式)+元件組成 佈局管理器(佈局樣式):控制組件的擺放規則,他分為幾種,其中最常見的有5種: 1.線性佈局(LinearLayout) LinearLayout是線性不佈局控制元件,