1. 程式人生 > >Android之四大元件、六大布局、五大儲存

Android之四大元件、六大布局、五大儲存

                                                                             一.四大元件:

四大元件分別為activityservicecontent providerbroadcast receiver

一、android四大元件詳解

1activity

1)一個Activity通常就是一個單獨的螢幕(視窗)。

2Activity之間通過Intent進行通訊。

3android應用中每一個Activity都必須要在AndroidManifest.xml

配置檔案中宣告,否則系統將不識別也不執行該Activity

2service

1service用於在後臺完成使用者指定的操作。service分為兩種:

astarted(啟動):當應用程式元件(如activity)呼叫startService()方法啟動服務時,服務處於started狀態。

bbound(繫結):當應用程式元件呼叫bindService()方法繫結到服務時,服務處於bound狀態。

(2)startService()bindService()區別:

(a)started service(啟動服務)是由其他元件呼叫startService()

方法啟動的,這導致服務的onStartCommand()方法被呼叫。當服務是started狀態時,其生命週期與啟動它的元件無關,並且可以在後臺無限期執行,即使啟動服務的元件已經被銷燬。因此,服務需要在完成任務後呼叫stopSelf()方法停止,或者由其他元件呼叫stopService()方法停止。

(b)使用bindService()方法啟用服務,呼叫者與服務繫結在了一起,呼叫者一旦退出,服務也就終止,大有“不求同時生,必須同時死”的特點。

(3)開發人員需要在應用程式配置檔案中宣告全部的service,使用<service></service>標籤。

(4)Service

通常位於後臺執行,它一般不需要與使用者互動,因此Service元件沒有圖形使用者介面。Service元件需要繼承Service基類。Service元件通常用於為其他元件提供後臺服務或監控其他元件的執行狀態。

3content provider

1android平臺提供了Content Provider使一個應用程式的指定資料集提供給其他應用程式。其他應用可以通過ContentResolver類從該內容提供者中獲取或存入資料

2)只有需要在多個應用程式間共享資料是才需要內容提供者。例如,通訊錄資料被多個應用程式使用,且必須儲存在一個內容提供者中。它的好處是統一資料訪問方式。

3ContentProvider實現資料共享ContentProvider用於儲存和獲取資料,並使其對所有應用程式可見。這是不同應用程式間共享資料的唯一方式,因為android沒有提供所有應用共同訪問的公共儲存區。

4)開發人員不會直接使用ContentProvider類的物件,大多數是通過ContentResolver物件實現對ContentProvider的操作。

5ContentProvider使用URI來唯一標識其資料集,這裡的URIcontent://作為字首,表示該資料由ContentProvider來管理。

4broadcast receiver

1)你的應用可以使用它對外部事件進行過濾,只對感興趣的外部事件(如當電話呼入時,或者資料網路可用時)進行接收並做出響應。廣播接收器沒有使用者介面。然而,它們可以啟動一個activityserice來響應它們收到的資訊,或者用NotificationManager來通知使用者。通知可以用很多種方式來吸引使用者的注意力,例如閃動背燈、震動、播放聲音等。一般來說是在狀態列上放一個持久的圖示,使用者可以開啟它並獲取訊息。

2)廣播接收者的註冊有兩種方法,分別是程式動態註冊和AndroidManifest檔案中進行靜態註冊。

3)動態註冊廣播接收器特點是當用來註冊的Activity關掉後,廣播也就失效了。靜態註冊無需擔憂廣播接收器是否被關閉,只要裝置是開啟狀態,廣播接收器也是開啟著的。也就是說哪怕app本身未啟動,該app訂閱的廣播在觸發時也會對它起作用。

二、android四大元件總結:

14大元件的註冊

4大基本元件都需要註冊才能使用,每個ActivityserviceContent Provider都需要在AndroidManifest檔案中進行配置。AndroidManifest檔案中未進行宣告的activity、服務以及內容提供者將不為系統所見,從而也就不可用。而broadcast receiver廣播接收者的註冊分靜態註冊(在AndroidManifest檔案中進行配置)和通過程式碼動態建立並以呼叫Context.registerReceiver()的方式註冊至系統。需要注意的是在AndroidManifest檔案中進行配置的廣播接收者會隨系統的啟動而一直處於活躍狀態,只要接收到感興趣的廣播就會觸發(即使程式未執行)。

24大元件的啟用

內容提供者的啟用:當接收到ContentResolver發出的請求後,內容提供者被啟用。而其它三種元件activity、服務和廣播接收器被一種叫做intent的非同步訊息所啟用

34大元件的關閉

內容提供者僅在響應ContentResolver提出請求的時候啟用。而一個廣播接收器僅在響應廣播資訊的時候啟用。所以,沒有必要去顯式的關閉這些元件。Activity關閉:可以通過呼叫它的finish()方法來關閉一個activity。服務關閉:對於通過startService()方法啟動的服務要呼叫Context.stopService()方法關閉服務,使用bindService()方法啟動的服務要呼叫Contex.unbindService()方法關閉服務。

4android中的任務(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是線性不佈局控制元件,