標籤:模式 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 * 800
-
1280 * 800
-
VM Heap
-
虛擬機器的記憶體,每一個應用程式所佔記憶體
-
Snapshot
-
快照,類似win7的睡眠作用。關閉模擬器時,會儲存當前模擬器的一些活動狀態,資料,下次啟動會載入這些資訊,啟動速度比較快。但是這個快照有bug,不推薦勾選。
-
CPU
-
arm、intel,如果下載intel的加速器才能選擇
-
要使用intel加速器,需要安裝加速器,並且下載相應鏡像檔案
-
Back camera
-
背部網路攝影機
-
Webcam
-
使用電腦的網路攝影機
-
VM Heap
-
DVM的預設大小,單位是M, 每一個應用程式所佔記憶體
-
Internal Storage
-
手機內部儲存大小
-
Use host GPU
-
用電腦的顯卡處理器,顯卡的cpu,電腦獨立顯卡,可以勾選,這樣模擬器會快點。整合顯卡會花屏
-
RAM
-
相當於電腦的記憶體條,斷點資料丟失
-
ROM
-
唯讀記憶體,相當於電腦的一塊硬碟,斷點資料不丟失
SDK目錄
-
add-ons
-
存放進階應用程式的API的檔案
-
build-tools
-
構建工具
-
docs
-
開發文檔
-
extras
-
存放依賴的第三方的包
-
platforms
-
各個平台的檔案
-
sources
-
API的原始碼檔案
-
system-images
-
系統的鏡像檔案
-
tools
-
工具檔案
Android工程目錄結構
-
src
-
原始碼
-
gen
-
系統自動產生的檔案
-
R.java中記錄了項目中的各種資源,相當於一個字典
-
Android 4.2
-
當前工程所使用的SDK
-
assets
-
資產目錄
-
不會在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參數
在布局檔案中註冊點擊事件
<Button android:onClick="click" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/et_number" android:layout_below="@+id/et_number" android:layout_marginTop="32dp" android:text="撥打" />
在代碼中增加對應的方法
// 按鈕的第四種點擊事件,原理:利用的反射技術// 第四種方式缺點:莫名其妙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會比較多。在不同解析度下會有不同的效果,通常不推薦使用這個。
Android基礎筆記(一)