android體系結構介紹
l 應用程式(application)
l 應用程式框架(Application Framework)
l 各種庫和android執行環境
l 操作層OS
Ø 應用程式(application):android的應用程式通常涉及使用者介面和互動;
Ø 應用程式框架(application Framework):
1. 一組view(UI元件):這些UI元件包括List、textbox、button;
2. Content Provider:提供一種機制,通過這個機制應用程式可是實現資料庫共享和互訪;
3. Resourse Manager:負責管理非程式碼的訪問,如圖片、xml以及國際化資原始檔;
4. Notification Manager:讓程式將警示資訊顯示在狀態列上;
5. Activity Manager:管理著應用程式的生命週期,提供了應用程式頁面的退出機制,一個應用程式由多個頁面你組成,而每個頁面的單位就是Activity,android應用程式是由多個activity的互動構成;
Ø 庫(Libraries)和執行環境(Run Time):
1. 系統C庫:一個從BSD 繼承來的標準C系統函式庫(LibC),他是專門基於嵌入式Linux的裝置定製的;
2. 媒體庫:基於packet Video OpenCORE,該庫支援多種常用的音訊、視訊格式回放和錄製,同時支援靜態影象檔案;
3. Surface Manager:對顯示子系統的管理,並且為多個應用提供了2D和3D圖層的無縫融合;
4. Lib WebCore:一個最新的web瀏覽器引擎, 用來支援android瀏覽器和一個可嵌入的web試圖;
5. SGL:底層的2D圖引擎;
6. 3D libraries:基於openGL ES 1.0 apis實現,該庫可以用硬體3d加速或者使用高度優化的3D軟加速;
7. FreeType:點陣圖(bitmap)和vector字型顯示;
8. Sqlite:關係型資料庫;
每個android應用程式都在它自己的程序中執行,都擁有一個獨立的Dalvik虛擬機器例項,Dalvik被設計成一個裝置,可以同時高效的執行多個虛擬機器裝置。Dalvik虛擬機器執行的(.dex)Dalvik可執行檔案,該格式檔案針對小記憶體使用做了優化。同時虛擬機器是基於暫存器的,所有的類都經過由Java 編譯器,然後通過sdk的“dx”工具轉化成dex格式,有虛擬機器執行。
Android應用程式介紹:
一般android應用程式包括以下四個部分:
l Activity
l Broadcast Intent Receiver
l Service
l Content Provider
1. Activity介紹:
Activity一般代表手機螢幕的一屏,相當於瀏覽器的一個頁面。當開啟一個螢幕時,之前的那一個螢幕會被置為暫停狀態,並且壓入歷史堆疊中,使用者可以通過回退操作返回到以前開啟過的螢幕。
開發時需要選擇行的移除沒有必要保留的螢幕,因為開啟後的螢幕會儲存在堆疊中
Android的生命週期:即“產生、執行、銷燬”
Intent和Intent Filter介紹:一個Intent就是一次對將要執行的操作的抽象描述,通過Intent可以在多個Activity之間進行跳轉,Intent兩個最重要的部分是動作(action)和動作對應的資料,典型的動作型別有,MAIN、view、pick、edit等,而動作對應的資料則以URI的形式表示;例如有兩個activity分別為A和B,要從A跳轉到B可以這樣寫
Intent intent = new Intent(A.this, B.class);
startActivity(intent);
與Intent有關聯的類叫做Intent Filters,如果Intent是一個請求,一個Intent Filters描述改元件所能相應Activity請求的能力。
2. Broadcast Intent Receiver介紹:
可以使用BroadcastReceiver來讓應用對外一個外部的事件作出響應。BroadcastReceiver通過NotificationManager來通知使用者這些事情發生了,BroadcastReceiver註冊的有兩種方式,一種是可以在AndroidManifest.xml中註冊,另一種可以在執行時的程式碼中使用Context.registerReceiver()進行註冊。使用者還可以通過Context.sendBroadcast()將他們自己的intent broadcasts廣播給其他的應用程式。
3. Service介紹:
Service是一種程式,它可以執行很長的時間,相當於後臺的一個服務,通過startService(Intent service)可以啟動一個Service,通過Context.bindService()可以繫結一個Service
4. Content Provider介紹:
資料在android當中是私有的,這些資料包括檔案資料和資料庫資料以及其他型別的一些資料。兩個程式之間資料的互動是通過Content Provider來實現,一個Content Provider實現了一組標準的介面,能夠讓其他應用儲存或讀取此Content Provider的各種資料型別。所以一個程式可以通過實現以個Content Provider的抽象介面將自己的資料暴露在外面,實現常見的介面有:
Query(URI,String[],String,String[],String):通過關鍵字查詢;
Insert(Uri,ContentValues):將一組資料插入到指定的地方 ;
Update(Uri,ContentValues,String,String[]):更新資料;
Delete(Uri, String, Stringp[]) :刪除資料;
總結
1.Android中稱為四大元件的為別為:Activity/Service/BroadCast Recevicer/Content provider
Activity:activity是使用者和應用程式互動的視窗,一個activity相當於我們實際中的一個網頁,當開啟一個螢幕時,之前的那一個螢幕會被置為暫停狀態,並且壓入歷史堆疊中,使用者可以通過回退操作返回到以前開啟過的螢幕。activity的生命週期:即“產生、執行、銷燬”,但是這其中會呼叫許多方法onCreate(建立) 、onStart(啟用) 、onResume(恢復) 、onPause(暫停) 、onStop(停止) 、onDestroy(銷燬) 、onRestart(重啟)。
Service:Service是一種程式,它可以執行很長的時間,相當於後臺的一個服務,通過startService(Intent service)可以啟動一個Service,通過Context.bindService()可以繫結一個Service。
BroadCast Recevicer:接受一種或者多種Intent作觸發事件,接受相關訊息,做一些簡單處理,轉換成一條Notification,統一了Android的事件廣播模型。可以使用BroadcastReceiver來讓應用對外一個外部的事件作出響應。Broadcast Receiver通過NotificationManager來通知使用者這些事情發生了,BroadcastReceiver註冊的有兩種方式,一種是可以在AndroidManifest.xml中註冊,另一種可以在執行時的程式碼中使用Context.registerReceiver()進行註冊。使用者還可以通過Context.sendBroadcast()將他們自己的intent broadcasts廣播給其他的應用程式。
Content provider:內容提供者,可通過它來共享自己的資料給外部呼叫,給第三方應用提供資料訪問的介面。
2.在android中的佈局有五大類
有的時候你可能用到一種,但有的時候你也可能需要兩種或者三種佈局同時一起使用。這五種佈局為別為:LinearLayout(線性佈局),FrameLayout(框架佈局),RelativeLayout(相對佈局),TableLayout(表格佈局),AbsoluteLayout(座標佈局);
LinearLayout:被稱為線性佈局,分為水平和垂直,設定的垂直或水平的屬性值,來排列所有的子元素。所有的子元素都被堆放在其它元素之後,因此一個垂直列表的每一行只會有一個元素,而不管他們有多寬,而一個水平列表將會只有一個行高(高度為最高子元素的高度加上邊框高度)。LinearLayout保持子元素之間的間隔以及互相對齊(相對一個元素的右對齊、中間對齊或者左對齊)。
FrameLayout:被稱為框架佈局,預先在螢幕中預留空白處,之後你可以在其中填充一個單一物件。比如,一張你要釋出的圖片。所有的子元素將會固定在螢幕的左上角;你不能為FrameLayout中的一個子元素指定一個位置。後一個子元素將會直接在前一個子元素之上進行覆蓋填充,把它們部份或全部擋住(除非後一個子元素是透明的)。
RelativeLayout:相對佈局,可指定某元素相對於其他的元素的位置,可以通過layout_below="相對控制元件"。可以以右對齊,或上下,或置於螢幕中央的形式來排列兩個元素。元素按順序排列,因此如果第一個元素在螢幕的中央,那麼相對於這個元素的其它元素將以螢幕中央的相對位置來排列。如果使用XML 來指定這個 layout ,在你定義它之前,被關聯的元素必須定義。
TableLayout:表格佈局,將子元素的位置分配到行或列中。一個TableLayout 由許多的TableRow 組成,每個TableRow 都會定義一個 row (事實上,你可以定義其它的子物件,這在下面會解釋到)。TableLayout 容器不會顯示row 、cloumns 或cell 的邊框線。每個 row 擁有0個或多個的cell ;每個cell 擁有一個View 物件。表格由列和行組成許多的單元格。表格允許單元格為空。單元格不能跨列,這與HTML 中的不一樣。
AbsoluteLayout:座標佈局,你給相應的控制元件通過x,y座標來設定,(0, 0)為左上角,當向下或向右移動時,座標值將變大。AbsoluteLayout 沒有頁邊框,允許元素之間互相重疊(儘管不推薦)。我們通常不推薦使用 AbsoluteLayout ,除非你有正當理由要使用它,因為它使介面程式碼太過剛性,以至於在不同的裝置上可能不能很好地工作。
Android常見的佈局形式有如下幾種:
1:檢視元件(VIEW)
在android當中View類是最基本的一個UI類,基本上所有高階的UI元件都繼承這個類。一個View在螢幕上佔據了一塊矩形區域,它負責渲染這個矩形區域,也可以處理這塊矩形區域發生的事件,並且可以設定該塊區域是否可見,以及獲取焦點等操作。
2:檢視容器元件(ViewGroup)
一個ViewGroup物件是一個Android.view.ViewGroup的例項,他負責新增進ViewGroup的這些view進行佈局,注意的是一個ViewGroup也可以加入到另一個ViewGroup當中。
3:佈局元件(Layout)
比較常用的佈局元件有:LinearLayout它可以實現水平佈局和垂直佈局,如果將佈局方向設定為“vertical“,則表明豎直佈局;設定為"horizontal"設定為水平佈局。還有RelativeLayout是相對佈局,如果設定A顯示在B的左側,那麼B的座標不是固定的而是相對A的位置,可以通過layout_below屬性設定。
4:佈局引數(LayoutParams)
當你把每一個View傳遞到這個RelativeLayout裡邊的時候,我們需要設定這個View的一些引數(比如:顯示的位置是左,還是右等)封裝在LayoutParams。如果沒有傳入系統則會採用預設的值,如果有值的話容易會根據傳進來的LayoutParams進行計算。
一些常見的佈局的說明:
LinearLayout:將自己包含的子元素,按照一個方向進行排列,方向有兩種分別是水平(horizontal)和豎直(vertical)
FrameLayout:是指在螢幕上預留好一塊空白的區域,所有的元素都被放置在FrameLayout區域的最左上方,無法給這些元素以個確切的位置,如果有很多值元素則會重疊在前一個元素上
RelativeLayout:相對佈局
單位的備註:
1:px(pixel)畫素
2:dip(device independent pixels):依賴於裝置的畫素
3:sp(scaled pixels-best for text size):帶比例的畫素
4:pt(points):點
5:in(inches):英尺
6:mm(mmillimeters):毫米
安卓內建包的說明
android包下的相關介紹
android.util:底層輔助類(特定容器類,xml輔助工具)
android.os:提供基本服務,訊息傳遞和程序通訊IPC
android.graphics:核心渲染包,提供影象渲染功能
android.text:豐富的文字處理方式
android.database:底層api處理資料庫,方便操作資料表和資料庫
android.content:在手機裝置上提供各種服務訪問資料,程式安裝到手機裝置和其他相關資源,動態顯示資料
android.view:核心使用者框架
android.widget:標準使用者介面元素,如:List/Button/Layout/Managers
android.app:高層應用程式模型,實現使用Activity
android.provider:呼叫提供的content provider介面
android.telephone:提供api互動和手機裝置的通話介面
android.webikit:包含一系列工作基於web內容的api
1.Apk, 四大元件(如Activity等)跟程序的關係
Apk, 四大元件【Activity,service等】和程序,vm的關係:每個APK是一個程序,而一個程序中,會有多個元件, 當APK之間存在依賴關係時,Android系統可以將多個APK分配給同一個程序,共用同一個VM。[APK1用到APK2的Activity,他們會處於同一個程序,共用同一個VM]。
2.Acitivity的生命週期
Activity 擁有四種基本狀態:
a. Active/Runing:一個新 Activity 啟動入棧後,它在螢幕最前端,處於棧的最頂端,此時它處於可見並可和使用者互動的啟用狀態。
b. Paused: 當 Activity 被另一個透明或者 Dialog 樣式的 Activity 覆蓋時的狀態。此時它依然與視窗管理器保持連線,系統繼續維護其內部狀態,所以它仍然可見,但它已經失去了焦點故不可與使用者互動。
c. Stoped: 當 Activity 被另外一個 Activity 覆蓋、失去焦點並不可見時處於 Stoped狀態。
d. Killed: Activity 被系統殺死回收或者沒有被啟動時處於 Killed狀態。
參考:http://www.ibm.com/developerworks/cn/opensource/os-cn-android-actvt/index.html
Android面試的兄弟的面經
Advanced_1(這是某位成功通過Android面試的兄弟的面經):
1. 為什麼看好 Android
2. 現在在公司做哪些工作(關於 Android)
3. Android 的框架以及一些基礎知識
4. Android 一些方面的領悟(如Android框架的 IoC特性,View System 的狀態機機制等)
Advanced_2(這是某位成功通過Android面試的兄弟的面經):
1.對多執行緒的運用和理解,及多執行緒之間handle的傳值。
2.對android虛擬機器的理解,包括記憶體管理機制垃圾回收機制。
3.framework工作方式及原理,Activity是如何生成一個view的,機制是什麼。
4. android本身的一些限制,不如apk包大小限制,讀取大檔案時的時間限制。
5. Linux中跨程序通訊的集中方式
Android_4:
1. dvm的程序和Linux的程序, 應用程式的程序是否為同一個概念
2. sim卡的EF 檔案有何作用
3. AT命令的User case的概念
4.嵌入式作業系統記憶體管理有哪幾種, 各有何特性
5. 什麼是嵌入式實時作業系統, Android 作業系統屬於實時作業系統嗎?
6. 一條最長的簡訊息約佔多少byte?
聯想android面試題
1.activity的生命週期。
2.橫豎屏切換時候activity的生命週期
3.android中的動畫有哪幾類,它們的特點和區別是什麼
4.handler機制的原理5.說說activity,intent,service是什麼關係
6.android中執行緒與執行緒,程序與程序之間如何通訊
7.widget相對位置的完成在antivity的哪個生命週期階段實現
8.說說mvc模式的原理,它在android中的運用
9.說說在android中有哪幾種資料儲存方式
10.android中有哪幾種解析xml的類,官方推薦哪種?以及它們的原理和區別