Android程序入口以及項目文件夾的含義和使用總結—入門


新接觸一門程序或者開發框架,我一般都要先弄清楚程序的入口在哪里,程序怎么運行的;建立一個項目后,各個文件夾有什么作用以及如何使用等等。理清楚這些東西對以后開發是很有好處的,古話說得好,工欲善其事,必先利其器。本文主要總結android程序的入口點和程序的運行流程(初識),android項目中各文件夾的含義,以及它們的使用。

剛接觸android程序,配置好開發andriod的環境,建立一個項目,框架自帶的經典hello程序,然后就可以在虛擬設備上進行運行了。但是對程序從哪里開始運行的,下一步應該執行哪個函數,以及各個項目文件夾干什么的,里面存儲什么,都有什么作用等等這些都是一臉懵逼的。經過這幾天的摸索,對這些概念有那么一點點理解,下面進行總結一下,有不對的地方,敬請各位android大牛進行指出,感激不盡。

1 Android程序的入口

1.1 Activity類

在andriod的應用程序中,用戶所感知的都是一個個應用界面,在android程序里面每個應用界面對應一個 Activity類,這類似於.NET Winform項目中的Form窗體。與WinForm中的Form一樣,Activity類也是一個基類,每個視圖界面都是繼承Activity的。下面看一下Activity的擴展類的代碼。

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
  	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		//執行邏輯代碼
	}	 
}

當Activity進行創建的時候,它會執行onCreate函數,當然,在Activity不同的生命周期中,會執行相應的函數。onCreate函數會在創建的時候被調用,同樣的,當這個Activity界面不可見的時候,又會調用onStop函數。這和WinForm又有些類似,這些函數對應Winform窗體的FormLoadFormClosing事件,但是不一樣的,FormClosing事件內部可以取消該窗體的關閉,而Activity卻不可以,這也是很好理解,因為在android程序中,你自己點擊后退鍵,那是肯定會回到前一個界面,當前界面會消失。

我們可以在程序建立許多個Activity界面類,和我們的WinForm程序一樣,也可以建立多個Form窗體界面,那么問題來了,這么Activity界面,程序在啟動的時候,應該啟動哪一個?

1.2 AndroidManifest.xml配置文件

在WinForm程序中,程序的啟動一般是Program類中的Main 負責啟動第一個程序界面,而在android程序中則是使用配置文件來配置入口的Activity界面。下面是AndroidManifest.xml 配置文件中的代碼。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.helloworld"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="21" />

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            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>

該配置文件是每一個android項目都必須要有的,下面解釋部分節點的含義。

  1. uses-permission :表示用戶需要授權該程序的權限,上面xml中配置的需要用戶授予訪問網絡的權限。
  2. **application ** : 這個配置節點很重要,它的子節點 activity 就是配置android程序的入口,android:name=".MainActivity" 配置了程序的初始視圖界面為MainActivity (這個MainActivity類在src文件夾中)。而 actioncategory 節點配置也很關鍵,action節點中的android.intent.action.MAIN表明這個Activity是整個應用程序的入口點;而category中的android.intent.category.LAUNCHER意思是把這個Activity歸屬到加載器類,即把這個Activity標注為自動會加載和啟動的Activity,這樣程序啟動時候就先加載這個Activity了。

目前理解的andriod程序運行是這樣的。至於內部如何實現的,目前涉獵不深,暫不明白。(望高手指點)

首先,加載程序需要的一個資源,接着讀取配置文件,找到application節點中配置的入口Activity視圖,然后加載該Activity視圖進行顯示。

2 項目文件夾的含義

新建一個android的項目之后,就會出現如下的目錄結構。

2016_10_5e5358bb-b380-4960-8813-c71061b2b9d7

主要的目錄有src、gen、assets、bin、res。

  1. src:存放項目的源代碼。
  2. gen:該文件是創建項目時候自動生成的,里面包了一個R.java的靜態類,它里面包括很多靜態類(內部類),每個靜態類中的靜態成員名稱都對應res文件夾中的一個資源名稱,保存着該資源的索引,方便在代碼中進行獲取資源。
  3. assets:assets文件夾里面都保存原始的文件格式,在代碼中通過AssetManager來進行訪問。
  4. bin:存放編譯后的apk和資源文件。
  5. res:存放項目需要的資源文件,比如字符串,布局,皮膚等,這里面每個資源的索引都保存在R.java類中。

2.1 src

src文件主要存放着項目的java源代碼,比如Activity視圖類,還有其他邏輯處理代碼。

2016_10_4ed87953-fdf7-45b4-9a7e-0aac5b1f702b

2.2 gen

gen目錄中的R.java文件保存着res文件中的資源索引。索引都是int類型的。

2016_10_3f0b7e6c-e03b-4cf0-9c5f-824e5aabbef0

從上往下看,array類保存數組的資源索引,drawable:保存圖片索引,id:保存布局文件中控件id,layout:保存布局文件的索引,string:保存字符串資源的索引。

注意,R.java這個類是保存着當前項目中工程師定義的資源索引,而android.R.java,是保存着android內部預定義好的資源索引。

2.3 res

res中有許多文件夾,不同的文件存放不同的資源。

2016_10_7c88c496-3e86-4536-8dae-44aef20871d0

  1. drawable:存放圖片資源,每添加一個圖片資源,R.drawble類中對應添加一個圖片索引。不同的drawable文件夾存放不同分辨率的圖片。
  2. layout:存放界面的布局,每一個布局文件對應R.layout里面的布局索引,索引名稱與布局文件名稱一致。
  3. values:里面存放xml資源文件,每個xml文件可以存放字符串、數組、樣式等數據。xml文件可以按照自己需要進行新建。

2016_10_405dde8e-386c-423b-8cde-123036c9ddb7

string.xml文件中存放了兩個字符串數據,那么在R.string類中會保存兩個字符串數據的索引,索引名稱和字符串資源中的name標簽的值一致。

2016_10_6f15a41e-ddd6-49fd-b3fc-44e6830f1489

添加一個數組資源,在R.array類中會添加一個數組資源索引,索引名稱和標簽中name屬性值一致。

2016_10_3b76e4d4-bb0d-46fe-9917-550050653707

布局中文件每個控件的id也會被添加到R.id類中去。其中在為控件指定id時有兩種方式,一種是@id/btn ,另外一種是@+id/btn ,前一種是R.id類中已經有了這個id定義,后一種是新增一個btn的id索引。

2.4 assets

assets文件夾主要保存原始的文件格式,比如我需要在代碼中訪問加載一個html文件,或者一個txt文檔,那么就需要把html文件和txt文檔保存到assets文件下。

3 項目文件夾中各種資源的使用

第2節已經搞清楚了各種文件夾中存放何種資源,那么本小節總結一下如何在程序代碼中訪問這些資源文件。(所有的資源索引都已經自動更新到R類中)

3.1 使用布局文件

布局文件類似wpf的界面布局文件,如果沒有程序使用它,那它僅僅只是一個xml文件,我們需要把這個文件通過Activity的setContentView方法進行渲染之后,它才會顯示到該Activity視圖上,這種設計方式實現了UI和業務邏輯代碼的分離。

在Activity的onCreate方法中,調用布局文件,渲染界面。

setContentView(R.layout.activity_main);//實現界面的渲染

Activity的setContentView 方法,帶一個參數,該參數就是布局文件的索引。該方法通過布局文件索引實現界面綁定。

獲取布局文件中的控件

TextView myView=(TextView) this.findViewById(R.id.textView1);

3.2 獲取values文件夾下的各種資源

訪問字符串資源

String sstr=this.getResources().getString(R.string.app_name);//獲取app名稱

訪問數組資源

int []myarray=this.getResources().getIntArray(R.array.my_array);

3.3 獲取assets文件夾下的資源

在assets文件中保存一個html頁面,我們需要在代碼利用WebView控件加載這個html頁面.

2016_10_9d924494-9a0e-47d6-b1f4-4045095ca96f

代碼如下:

myWebView.loadUrl("file:///android_asset/myblog.html");  //注意獲取文件的路徑格式

4 總結

將項目中的各個部分的作用弄清楚對於剛接觸android編程的新手我來說是很重要,這是基礎性的東西,明白了這個才能夠更好的深入android的學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM