Android程序模塊1

1、AndroidManifest.xml 文件
AndroidManifest.xml是每一個應用都需要的文件。位於工程文件根目錄下,描述了程序包的一個全局變量,包括的應用組件(activities, services等等)和爲每個組件的實現類, 什麼樣的數據可以操作, 以及在什麼地方運行。這個文件的一個重要數據(概念)是intent 過濾器。這個過濾器描述了何時何種情況下讓activity 啓動。當一個activity想要執行一個動作, 例如打開一個聯繫人選取屏幕, 會創建一個Intent對象. 該對象包含了很多的描述信息, 描述了你想做什麼操作, 你想處理什麼數據, 數據的類型, 以及一些其它的重要信息. Android拿這個Intent的信息與所有應用的intent 過濾器比較, 找到一個最能恰當處理請求者要求的數據和action的activity   。另外還要聲明您的應用Activities,Content Providers,Services   ,和Intent Receivers,你也可以在AndroidManifest.xml文件中指定權限和instrumentation(安全控制和測試)。
一個AndroidManifest.xml文件的例子: 
<?xml version="1.0" encoding="utf-8"?>
<manifest   xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.my_domain.app.helloactivity">   

<application android:label="@string/app_name">
     <activity class=".HelloActivity">
         <intent-filter>
            <action android:value="android.intent.action.MAIN"/>
                <category                                 
                      android:value="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
    </manifest>
這裏記錄了一些通用特性: 
幾乎所有的AndroidManifest.xml 文件(同其它的Android文件一樣)都會包含一個命名空間的聲明xmlns:android="http://schemas.android.com/apk/res/android"在第一個元素中. 該聲明使標準Android屬性在該文件中得以使用, 該屬性爲文件的xml元
素提供了大部分數據. 大多數AndroidManifest.xml 文件僅包含一個<application>元素, 該元素定了這個程序包內所有應用層面上可用的組件和屬性. 
下面列出了AndroidManifest.xml 這個文件詳細的結構大綱, 描述了所有可用標籤。
<manifest> 
文件根節點, 描述了程序包的所有內容。在其節點下面內可以放置:
<uses-permission> 
請求一個安全授權, 必須被授予該權限, 您的程序包才能正確的操作. 查看安全模塊文檔, 瞭解有關授權的更多信息. 一個manifest可以包含零個或多個這樣的節點。
<permission> 
聲明一個安全授權, 用來限制哪些應用可以訪問您的程序包內的組件和特有機制. 查看安全模塊文檔, 瞭解有關授權的更多信息. 一個manifest可以包含零個或多個這樣的節點。
 
<application> 
描述程序包內應用級別組件的根節點. 該節點能夠描述應用程序的全局(和/或)默認屬性, 例如標籤, 圖標, 主題, 需要的授權, 等等. 一個manifest可以包含零個或一個這樣的節點(多個application 節點是不允許的). 在該節點下, 可以包含零個或多個以下每個組件的聲明: 
<activity> 
Activity 是應用於用戶交互的最主要機制. 當一個應用運行的時候, 用戶看到的第一個屏幕就是activity, 並且, 用戶所使用的其它絕大多數屏幕(界面)也會是activity。
<service> 
Service 是一個在後臺任意時刻都可以運行的組件. 同activity 標籤一樣, 你可以選擇包含一個或多個<intent-filter>元素; 
<provider>
ContentProvider組件是用來管理數據持久化及數據發佈的, 發佈的數據可以被其它的應用訪問. 

2、Activity
Activity是一個與用戶交互的系統模塊,幾乎所有的Activity都是和用戶進行交互的,所以在每個Activity進行初始化的時候,都要執行setContentView (View)函數來指定界面UI。在Activity中有兩個重要的函數:onCreate(Bundle)函 數是 你 進 行初 始化 的 地方, 這 個也是執行setContentView(View)函數的地方,setContentView(View)函數可以傳入一個由XML編制的UI界面,可以使UI和具體實現完全分離。onPause()函數是處理用戶離開當前Activity的地方。更重要的是,任何在當前Activity中的任何改變都要在這個函數中提交。一般是使用ContentProvider 來保存數據當從一個界面跳到另一個界面的時候,實質上是從一個Activity跳轉到另一個Activity的時候。使用函數Context.startActivity()來實現。另外,所有的Activity都要在AndroidManifest.xml中註冊。
Activity的生命週期是用Activity stack來管理的。當一個新的Activity啓動,就把這個Activity放在Stack 的頂部,然後這個Activity就變成了一個運行的Activity。以前
運行的Activity現在被壓在Stack的地步,處於Pause狀態。只有Stack頂部的Activity纔可以在前臺運行,且處於活動狀態。

Activity有四種狀態:
活動狀態,當Activity處於Stack頂時,就是手機當前的現實屏幕,這是Activity就處於activity或者運行狀態。
運行但是失去焦點,當Activity還處於運行狀態時,但是屏幕是有另外一個Activity處於文檔處於焦點狀態,當前的Activity就處於pause。
停止,當Activity被另一個Activity完全覆蓋的時候,就被停止了,其實就是雖然在運行,但是用戶卻看不見。
結束,當Activity處於pause或者stop時,系統可以結束Activity,回收資源,這時Activity就是處於結束狀態了。
處於結束狀態的是Activity,如果要使用戶可見,只要重啓纔可以。
下面的圖表示了Activity的生命週期。

Activity 的生命週期是被以下的函數控制的。
public class Activity extends ApplicationContext {
     protected void onCreate(Bundle icicle);
     protected void onStart();
     protected void onRestart();
     protected void onResume();
     protected void onFreeze(Bundle outIcicle);
     protected void onPause();
     protected void onStop();
     protected void onDestroy();
}

一般的程序都有幾個界面,所以一個程序都有幾個Activity。在Activity進行轉換的時候需要藉助函數startSubActivity(Intent I, int type);第一個參數爲指定的需要跳轉的Activity。在這個參數中含包含了原始的Activity需要向跳轉的目標Activity需要傳遞的數據。此數據是使用函數putExtra()放入Intent;
Intent i = new Intent(this, NoteEdit.class);
    i.putExtra(NotesDbAdapter.KEY_ROWID, id);
    startSubActivity(i, ACTIVITY_EDIT);

3、View
一個界面就是一個Activity,但是界面上會有很多的控件之類的,只要是用戶可以看到的,這些東西都是view。一個View佔有一個長方形的地方,而且View是可以嵌套的。View還可以負責響應用戶的動作。所有的View的結構都是被安排在樹形結構中。你既可以在代碼中改變View的結構樹,也可以在XML文件中去作修改。View也是所有的佈局管理器的基類。在創建一個View的結構樹的時候,一個會有幾個你會很感興趣的操作。設置屬性,比方說一個TextView,應該會有一些屬性值和一些函數去設置比如像字體,顏色等的屬性。設置焦點,使用requestFocus()可以設置焦點。
接下來是最重要的,就是註冊監聽事件的函數,一個的View都是相應的函數來設置監聽事件。
還有一個是設置可見性的函數。
下面的這一段代碼是在xml中配一個Button,然後在Activity中獲得這個Button的實例,然後可以設置這個Button的監聽函數。
Xml中的代碼如下:
<Button android:id="@+id/my_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="@string/my_button_text"/>
Activity中的代碼如下:
Button myButton = (Button) findViewById(R.id.my_button);
然後是設置監聽函數:
myButton,setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//To-Do
}
});
Android框架是負責組織,顯示,繪製Views的。一般不直接在View上調用函數,除非是自己實現一個ViewGroup.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章