1.Activity 在應用中提供了一個可交互的窗口。該窗口經常是填滿整個屏幕的,但也可以比屏幕小並且置於其他窗口上方。
2.一個應用可以由多個 Activity 組成,每個Activity都可以啓動別的Activity。當一個新的Activity啓動時,先前的一個Activity被stop,但系統會在“返回棧(backstack)”中保存。
3.當一個新的Activity啓動時,它被壓入返回棧並獲得用戶焦點;當按下返回按鈕時,它從棧中彈出(並銷燬),先前的Activity則繼續。
4.創建一個Activity:必須創建一個Activity(或者Activity已存在的子類)的子類。在子類中實現各種生命週期之間切換的回調方法。
兩個最重要的回調方法:
onCreate():在Activity被創建時調用。在實現中可以初始化Activity的主要組件。最重要的是調用setContentView()來定義該Activity的佈局;
onPause():當用戶離開當前Activity事被調用。通常用來提交需要被保存的更改。
實現用戶界面:
通過繼承View類來實現用戶界面。
在mainfest文件中生命Activity,格式如下:
<manifest ... > <application... > <activityandroid:name=".ExampleActivity" /> ... </application... > ... </manifest >
<activity>包含在<application>中,可以包含<intent-filter>和<meta-data>。
<activity>可以包含多種屬性,如android:theme等,其中android:name屬性是必須的。
使用intent 過濾器:通過指定<intent-filter>來聲明其他的應用程序怎樣激活它。
當新建應用時,main Activtiy中自動包含了以下intent過濾器:
<activity android:name=".ExampleActivity"android:icon="@drawable/app_icon"> <intent-filter> <actionandroid:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity>
<action>元素指明這個是應用的主入口,<category>指明這個Activity應被列入系統的應用列表。
如果無需其他應用來啓動這個Activity,那麼intent-filter只需包含上述內容即可。
但如果要讓該Activity響應其他應用傳來的隱式的intent的話,就必須添加額外的intent-filter
5.啓動Activity:通過調用startActivity(),並傳入描述你要啓動的Activity的Intent。
Intent可以明確指定要啓動的activity。如:
Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);
也可以只指定要執行的操作,然後由系統選擇一個應用。如:
Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_EMAIL, recipientArray); startActivity(intent);
6.啓動Activity來得到一個結果:調用startActivityForResult()來啓動其他Activity,然後實現onActivityResult()方法,當所請求的Activity結束時,它會返回一個Intent到 onActivityResult()方法中。如:
private void pickContact() { // Create anintent to "pick" a contact, as defined by the content provider URI Intent intent =new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); startActivityForResult(intent, PICK_CONTACT_REQUEST); } @Override protected void onActivityResult(int requestCode, intresultCode, Intent data) { // If therequest went well (OK) and the request was PICK_CONTACT_REQUEST if (resultCode== Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) { // Perform a query to the contact's contentprovider for the contact's name Cursorcursor = getContentResolver().query(data.getData(), newString[] {Contacts.DISPLAY_NAME}, null, null, null); if(cursor.moveToFirst()) { // True if the cursor is not empty intcolumnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME); Stringname = cursor.getString(columnIndex); // Dosomething with the selected contact's name... } } }
7.關閉一個Activity:調用finish()方法,也可以調用finishActivity()來關閉先前啓動的Activity。
8.Activity生命週期:
看幾種情況:
1.該Activity第一次被啓動時,依次調用onCreate()->onStart()->onResume();
2.按返回鍵時,依次調用onPause()->onStop()->onDestroy();
3.當直接進去其他程序而未退出時(比如按電話鍵直接進入電話程序)時,依次調用onPause()->onStop(),而不調用onDestroy();
4.返回到該Activity時,依次調用onRestart()->onStart()->onResume();
可以總結如下:
- 使用onCreate()方法來實例化需要在應用中用到的object;
- 當activity在前臺時,使用onResume()來運行services或者代碼段;
- 當activity不在前臺時,使用onPause()來停止運行services或者代碼段;
- 在activity被銷燬之前,使用onDestroy()來釋放資源;
9.爲Activity設置風格和主題:
通常的Activity都是佔滿整個屏幕的。但也可以設置成對話框模式,如彈出窗口等。只需在 AndroidManifest.xml 文件中更改Activity的android:theme屬性即可。如:
<?xml version=“1.0“ encoding=“utf-8“?> <manifest xmlns:android=“http://schemas.android.com/apk/res/android“ package=”net.learn2develop.Activity101” android:versionCode=”1” android:versionName=”1.0” > <uses-sdk android:minSdkVersion= ”14” /> <application android:icon=”@drawable/ic_launcher” android:label=”@string/app_name” android:theme=”@android:style/Theme.Dialog”> <activity android:label=”@string/app_name” android:name=”.Activity101Activity” > <intent-filter > <action android:name=”android.intent.action.MAIN” /> <category android:name=”android.intent.category.LAUNCHER” /> </intent-filter> </activity> </application> </manifest>
效果如圖:
10.隱藏Activity的標題:
只需要在OnCreate()方法中添加如下代碼:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //---hides the title bar--- requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); }
效果如圖: