Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android基礎筆記(一)

Android基礎筆記(一)

編輯:關於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 包括了 Url
intent.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會比較多。在不同分辨率下會有不同的效果,通常不推薦使用這個。

這裡寫圖片描述

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved