Android基礎筆記(一)
1G - 5G的介紹Android的作業系統的介紹Android版本Android系統的架構兩種虛擬機器的不同ART模式模擬器的簡介SDK目錄Android工程目錄結構打包的過程ADB常用指令案例電話撥號器四種點擊事件Android的常用布局Andriod中的單位
1G - 5G的介紹1st - Generation代表作是:大哥大,只能進行語音通訊,不能夠發簡訊、更不能上網。2nd - Generation代表作是:小靈通,可以收發簡訊、可以上網,但是速度幾十Kps,而且不能在通話時使用。3rd - Generation速率一般在幾百Kbps,並可以在通話的時候使用,保持線上,移動互聯時代到來。4th - Generation(LTE - Long Time Evolution - 長時間的進化)速率達到100Kbps以上,可以線上觀看高清視頻,上傳下載大批量資料。5th - Generation速度可達到1Gbps以上,幾乎滿足人們的所有需求。
它們之間最大的區別是:速率的不同
Android的作業系統的介紹
Android是由安迪-魯賓開發的,一開始只是一個作為智能相機的系統,隨著手機市場的擴大轉向手機作業系統。
Android名稱:安迪-魯賓非常喜歡一款遊戲裡面的一個大瓢蟲。
Android的Logo來源 :要求無性別、種族歧視,設計師在上廁所時看到廁所門上的標識,產生的靈感。
Android版本
幾個比較穩定和重要的版本
| 版本 |
API |
特性 |
| 2.3.3 |
10 |
增加NFC支付功能,近場感應功能 |
| 3.0 |
11 |
專為平板電腦和大螢幕裝置最佳化 |
| 4.1.2 |
16 |
|
Android系統的架構
4層架構:① Applications 原生的應用程式:瀏覽器、案頭、連絡人等② Application Framework 中間介,java代碼調用底層c代碼,提供各種管理器③ Libraries(c程式碼程式庫),Android Runtime(Dalvik VM、Libraries C)④ 底層Linux(安全管理、記憶體管理、進程管理、電源管理、硬體驅動)
注意:Dalvik VM:虛擬機器,android代碼運行在此虛擬機器
兩種虛擬機器的不同為什麼會有兩種虛擬機器?Sun公司的著作權問題傳統的JVM編寫
.java檔案 ->編譯為
.class檔案 -> 打包成
.jar檔案(將java源碼編譯為class檔案,然後將一組class打包成jar)基於
棧結構,棧儲存於記憶體中,所以需要記憶體空間Dalvik VM編寫
.java檔案 -> 編譯為
.class檔案 -> 打包成
.dex檔案 -> 打包成
.apk檔案(將一組class編譯為一個dex檔案,然後有的平台為了更高的效率會將一個dex轉換成odex檔案,將N多個class檔案編譯為一個dex,這樣執行效率會比較快,更適合在移動平台運行)基於
寄存器的結構,寄存器在CPU中,所以用到CPU的空間。
請看,在JVM和DVM中不同的打包結構:
ART模式
ART模式通過在安裝應用程式時,自動對程式進行代碼預讀取編譯,讓程式直接編譯成機器語言,免去了Dalvik模式要時時轉碼,實現高效率、省電、佔用更低的系統記憶體、手機運行流暢。
但凡事總有正反兩面,ART在解決了該問題的同時,同時也有如:會佔用略高一些的儲存空間、安裝程式時要相比普通Dalvik模式要長一些時間來實現先行編譯。
ART模式是典型的以空間換時間的解決案例。
9 模擬器的簡介
裝置的常見解析度
| 名稱 |
解析度 |
說明 |
| VGA |
480*640 |
標準的視頻介面解析度 |
| QVGA |
240*320 |
只有VGA的四分之一 |
| HVGA |
480*320 |
只有VGA的二分之一,使用的比較少了,開發使用 |
| WVGA |
480*800 |
|
| FWVGAQ |
480:854 |
|
Android開發常用的適配解析度:480 * 8001280 * 800VM Heap虛擬機器的記憶體,每一個應用程式所佔記憶體Snapshot快照,類似win7的睡眠作用。關閉模擬器時,會儲存當前模擬器的一些活動狀態,資料,下次啟動會載入這些資訊,啟動速度比較快。但是這個快照有bug,不推薦勾選。CPUarm、intel,如果下載intel的加速器才能選擇要使用intel加速器,需要安裝加速器,並且下載相應鏡像檔案Back camera背部網路攝影機Webcam使用電腦的網路攝影機VM HeapDVM的預設大小,單位是M, 每一個應用程式所佔記憶體Internal Storage手機內部儲存大小Use host GPU用電腦的顯卡處理器,顯卡的cpu,電腦獨立顯卡,可以勾選,這樣模擬器會快點。整合顯卡會花屏RAM相當於電腦的記憶體條,斷點資料丟失ROM唯讀記憶體,相當於電腦的一塊硬碟,斷點資料不丟失SDK目錄add-ons存放進階應用程式的API的檔案build-tools構建工具docs開發文檔extras存放依賴的第三方的包platforms各個平台的檔案sourcesAPI的原始碼檔案system-images系統的鏡像檔案tools工具檔案Android工程目錄結構src原始碼gen系統自動產生的檔案R.java中記錄了項目中的各種資源,相當於一個字典Android 4.2當前工程所使用的SDKassets資產目錄不會在R檔案中註冊,原封不動的打包到APK中bin編譯後的二進位檔案包括class、資源檔、dex、apk、資訊清單檔等libs工程中所使用的庫res系統資源,所有檔案都會在R檔案產生資源ID
① drawable:圖片資源
drawable-hdpi:高解析度的圖片目錄drawable-ldpi:低解析度的圖片目錄drawable-mdpi:中解析度的圖片目錄drawable-xhdpi:大解析度的圖片目錄drawable-xxhdpi:超大解析度的圖片目錄② layout:介面布局③ menu:菜單④ values:字串、樣式等資料⑤ anim:動畫檔案⑥ raw:原生檔案
AndroidManifest.xml① Android中的四大組件(Acticity、ContentProvider、BroadcaseReceiver、Service)都需要在該檔案中註冊② 程式所需的許可權也需要在此檔案中聲明打包的過程
使用aapt(application android package tools)工具打包
編譯 -> 打包 -> 簽名 -> adb -> 部署到手機上
ADB常用指令顯示已串連的裝置adb devices顯示內容:裝置名稱,狀態(device、offline)匯入檔案到手機adb push <手機目標路徑>
推:把電腦上的檔案推送到模擬器裡從手機匯出檔案adb pull <手機源檔案路徑>
拉:把模擬器中的檔案拉到電腦安裝程式adb install (案例)電話撥號器
// 3. 找到edit控制項EditText et_number = (EditText) findViewById(R.id.et_number);// 4. 擷取到電話號碼String number = et_number.getText().toString().trim();if (TextUtils.isEmpty(number)) { // 土司 Toast.makeText(MainActivity.this, "不可為空", Toast.LENGTH_LONG) .show(); return;}// 5. 撥打到電話 底層原理:socket通訊Intent intent = new Intent(); // 建立一個意圖:想幹什麼事intent.setAction(Intent.ACTION_CALL);// 6. 設定撥打到電話的資料// Uri 包括了 Urlintent.setData(Uri.parse("tel:" + number)); // Uri:統一資源識別項,Url:統一資源定位器// 7.開啟意圖startActivity(intent);
16 四種點擊事件
使用內部類實現OnClickListener介面來實現
private class MyButton implements OnClickListener { @Override public void onClick(View v) { // 3. 找到edit控制項 EditText et_number = (EditText) findViewById(R.id.et_number); // 4. 擷取到電話號碼 String number = et_number.getText().toString().trim(); if (TextUtils.isEmpty(number)) { // 土司 Toast.makeText(MainActivity.this, "不可為空", Toast.LENGTH_LONG) .show(); return; } // 5. 撥打到電話 底層原理:socket通訊 Intent intent = new Intent(); // 建立一個意圖:想幹什麼事 intent.setAction(Intent.ACTION_CALL); // 6. 設定撥打到電話的資料 // Uri 包括了 Url intent.setData(Uri.parse("tel:" + number)); // Uri:統一資源識別項,Url:統一資源定位器 // 7.開啟意圖 startActivity(intent); }}
通過匿名內部類來實現
// 實現點擊事件的第二種方式:匿名內部類btn_call.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { callPhone(); }});
由類檔案去實現監聽介面
public class MainActivity extends Activity implements OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 1. 找到按鈕 Button btn1 = (Button) findViewById(R.id.button1); Button btn2 = (Button) findViewById(R.id.button2); Button btn3 = (Button) findViewById(R.id.button3); Button btn4 = (Button) findViewById(R.id.button4); Button btn5 = (Button) findViewById(R.id.button5); // 設定點擊事件的第三種方式 btn1.setOnClickListener(this); btn2.setOnClickListener(this); btn3.setOnClickListener(this); btn4.setOnClickListener(this); btn5.setOnClickListener(this); } private void callPhone() { // 3. 找到edit控制項 EditText et_number = (EditText) findViewById(R.id.et_number); // 4. 擷取到電話號碼 String number = et_number.getText().toString().trim(); // 5. 撥打到電話 底層原理:socket通訊 Intent intent = new Intent(); // 建立一個意圖:想幹什麼事 intent.setAction(Intent.ACTION_CALL); // 6. 設定撥打到電話的資料 // Uri 包括了 Url intent.setData(Uri.parse("tel:" + number)); // Uri:統一資源識別項,Url:統一資源定位器 // 7.開啟意圖 startActivity(intent); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: callPhone(); break; case R.id.button2: break; case R.id.button3: break; case R.id.button4: break; case R.id.button5: break; default: break; } }}
在布局檔案增加onclick屬性,並在代碼中添加對應的方法,並且傳入View參數
在布局檔案中註冊點擊事件
在代碼中增加對應的方法
// 按鈕的第四種點擊事件,原理:利用的反射技術// 第四種方式缺點:莫名其妙public void click(View v) { callPhone();}
Android的常用布局線性布局水平、垂直顯示,如果有多個組件,超出螢幕大小,超出部分就不顯示可以通過android:orientation來定義方向android:orientation=“horizontal”表示水平方向android:orientation=“vertical”表示垂直方向相對布局相對布局是實際布局中最常用的布局方式之一。相對布局在xml檔案中使用來定義。相對布局可以設定某一個視圖相對於其他視圖的位置,這些位置可以包括上下左右等,因而相較於其他的布局方式而言具有很大的靈活性。
RelativeLayout的常用屬性有以下一些:第一類:屬性值為true或false android:layout_centerHrizontal 水平置中 android:layout_centerVertical 垂直置中 android:layout_centerInparent 相對於父元素完全置中 android:layout_alignParentBottom 貼緊父元素的下邊緣 android:layout_alignParentLeft 貼緊父元素的左邊緣 android:layout_alignParentRight 貼緊父元素的右邊緣 android:layout_alignParentTop 貼緊父元素的上邊緣 第二類:屬性值必須為id的引用名“@id/id-name” android:layout_below 在某元素的下方 android:layout_above 在某元素的的上方 android:layout_toLeftOf 在某元素的左邊 android:layout_toRightOf 在某元素的右邊 android:layout_alignTop 本元素的上邊緣和某元素的的上邊緣對齊 android:layout_alignLeft 本元素的左邊緣和某元素的的左邊緣對齊 android:layout_alignBottom 本元素的下邊緣和某元素的的下邊緣對齊 android:layout_alignRight 本元素的右邊緣和某元素的的右邊緣對齊第三類:屬性值為具體的像素值 android:layout_marginBottom 離某元素底邊緣的距離 android:layout_marginLeft 離某元素左邊緣的距離 android:layout_marginRight 離某元素右邊緣的距離 android:layout_marginTop 離某元素上邊緣的距離
表格版面配置使用的較少幀布局架構布局是將控制群組織在Android程式的使用者介面中最簡單的布局類型之一。架構布局在xml檔案中使用來定義。架構布局中的子視圖總是被繪製到相對於螢幕的左上方上,所有添加到這個布局中的視圖都是以層疊的方式顯示,第一個添加到架構布局中的視圖顯示在最底層,最後一個被放在最頂層,上一層的視圖會覆蓋下一層的視圖,類似於html中的div。
在架構布局中,常用的屬性有以下幾項: android:top 將視圖放到螢幕的頂端 android:Buttom 將視圖放到螢幕的低端 android:Left 將視圖放到螢幕的左端 android:Right 將視圖放到螢幕的右端 android:Center_vertical 將視圖按照垂直方向置中顯示 android:Center_horizontal 將視圖按照水平方向置中顯示
Andriod中的單位dip縮寫:dp一個基於density(密度)的抽象單位,這個和裝置硬體有關,通常在開發中設定一些view的寬高推薦用這個,一般情況下,在不同解析度,都不會有縮放的感覺。在運行時, Android根據使用中的螢幕的實際密度, 透明地處理任何所需dip單位的縮放。不依賴裝置像素,依據裝置自動適應大小,推薦使用sp同dip/dp相似,會根據使用者的字型大小偏好來縮放,專門用於設定字型的大小px像素,是螢幕的物理像素點,與密度相關,密度大了,單位面積上的px會比較多。在不同解析度下會有不同的效果,通常不推薦使用這個。