Android 學習筆記【基礎掃盲篇】
前一段時間斷斷續續的看過幾天android,因爲不連貫,效果不是很好,最近打算用一個月的時間系統的學習一下。
一、android的生態系統
Android是由Google在2007年推出的一個開源系統平臺,主要針對移動設備市場,如今的最新版本是Android 3.2,android底層基於精簡優化過的Linux kernel 2.6。android系統架構如圖:
從圖上能夠看出來,整個系統分爲4層
(1)、Linux Kernel
該層是使用google本身精簡優化過的linux系統,使其更適合內存和電量有限的移動設備
主要是負責系統底層的內存管理,安全管理,進程調度以及硬件進行通信等等,並對其上層提供服務。
(2)、android Runtime
包含兩部分:
一、core Libraries(核心庫),該核心庫提供大部分在Java編程語言核心類庫中可用的功能。
二、Dalvik 虛擬機。Dalvik是Google公司本身設計用於Android平臺的Java虛擬機,Dalvik 通過優化,容許在有限的內存中同時運行多個虛擬機的實例,而且每個Dalvik 應用做爲一個獨立的Linux 進程執行。獨立的進程能夠防止在虛擬機崩潰的時候全部程序都被關閉。
Dalvik和JVM的幾點區別
一、Dalvik 基於寄存器,而 JVM 基於棧。基於寄存器的虛擬機對於更大的程序來講,在它們編譯的時候,花費的時間更短。
二、Dalvik主要是完成對象生命週期管理,堆棧管理,線程管理,安全和異常管理,以及垃圾回收等等重要功能。
三、Dalvik負責進程隔離和線程管理,每個Android應用在底層都會對應一個獨立的Dalvik虛擬機實例,其代碼在虛擬機的解釋下得以執行。
四、不一樣於Java虛擬機運行java字節碼,Dalvik虛擬機運行的是其專有的文件格式Dex,ex文件格式能夠減小總體文件尺寸,提升I/o操做的類查找速度。
五、全部的Android應用的線程都對應一個Linux線程,虛擬機於是能夠更多的依賴操做系統的線程調度和管理機制
(3)、Libraries
Android包含一個C/C++庫的集合,供Android系統的各個組件使用。例如:
libc:這是系統的C庫,Media Framework: 媒體庫,SurfaceManager 顯示系統管理庫,負責把2D或3D內容顯示到屏幕,WebKit,瀏覽器內核等不一樣的庫。供上層調用
(4)、Application Framework
應用程序框架,也是咱們開發的時候打交道最多的,給咱們提供裏豐富多彩的應用程序API,經過這些咱們能夠作出豐富多彩的應用。
Activity Manager(活動管理器),主要負責程序生命週期的管理。
Content Providers (內容提供者),使應用程序能訪問其餘應用程序(如通信錄)的數據,或共享本身的數據
Resource Manager (資源管理器),提供訪問非代碼資源,如本地化字符串、圖形和佈局文件
View (試圖),豐富的、可擴展的視圖集合,可用於構建一個應用程序。包括包括列表、網格、文本框、按鈕,甚至是內嵌的網頁瀏覽器
(5)Applications
四層中的最上層,在系統中安裝的應用程序,就位於該層,咱們之後寫的程序也基本在該層運行,所有由Java語言編寫,固然Android也容許用戶使用C和C++編寫程序的。
二、android應用程序的目錄結構
一、src
: 沒什麼好說的,就是咱們的源代碼了
二、gen
: 不知道gen是否是generate的縮寫,gen目錄存放系統自動維護的一些文件,主要是 R.java。R文件由ADT自動維護,主要是爲res目錄下面的xml,圖像,媒體等文件同步生成一個相似字典的東西,系統中對這些資源的引用能夠經過R文件來操做。在編譯的時候會對R文件進行檢查,若是R文件中沒有引用的資源不會被編譯打包,以節省系統資源,另外,R文件只有一個,咱們不須要也不要去改裏面的內容。
三、assets
:assets也是一個資源文件夾,assets中的資源能夠被打包到程序裏面,和Res不一樣的地方是,ADT會爲res下面的文件在R文件中生成一個ID,而不會爲assets中的資源生成ID,所以要使用該目錄下面的文件,須要經過完整路徑的方式進行調用。(該目錄下面的文件不會被編譯,直接複製到程序安裝包中)
四、res
:資源目錄(咱們不能在Res目錄下面創建自定義目錄,以及爲已有的目錄創建子目錄)
drawable:
主要存放不一樣分辨率的圖片文件
(1)drawable-hdpi裏面存放高分辨率的圖片,如WVGA (480x800),FWVGA480x854)
(2)drawable-mdpi裏面存放中等分辨率的圖片,如HVGA (320x480)
(3)drawable-ldpi裏面存放低分辨率的圖片,如QVGA (240x320)
layout:
存放用於佈局的xml文件
values:
用於存放一些常量(不一樣類型的變量存放在不一樣的文件中)
strings.xml 定義字符串和數值
arrays.xml 定義數組
colors.xml 定義顏色和顏色字串數值
dimens.xml 定義尺寸數據
styles.xml 定義樣式
anim:
存放一些和動畫有關的xml文件
xml:
存放一些自定義的xml文件
raw:
該目錄下面的文件不會被編譯,直接複製到程序安裝包中。
五、AndroidManifest.xml
- <?xml version="1.0" encoding="utf-8"?>
- lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.cheney.weiboo"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdk android:minSdkVersion="4" />
-
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".IndexActivity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application></manifest>
xmlns:android:包含命名空間的聲明。xmlns:android="http://schemas.android.com/apk/res/android",使得Android中各類標準屬性可以在文件中使用,提供大部分元素的數據。 package:聲明應用程序包。 application:包含package中application級別組件聲明的根節點。此元素耶可包含application的一些全局和默認的屬性,如標籤、icon、主題、必要權限等。一個manifest可以包含零個或一個此元素,不能大於一個。 android:icon:應用程序圖標。 android:lebel:應用程序名字。 Activity:註冊系統中的activity,全部的activity都要在此文件中註冊。 android:name:activity的名字,即類名。 intent-filter:聲明瞭指定一組組件支持的Intent值,從而造成IntentFilter。 action:組件支持的Intent action 。 category:組件支持的Intent Category。 uses-sdk: 應用程序所使用的sdk版本。
歡迎關注本站公眾號,獲取更多信息