Android四大組件之一 能夠理解爲Android中的界面,每個界面都是一個Activity Activity的使用必須在清單文件中進行配置 在清單文件中,android
標籤中若是帶有這個子節點,則會在系統中多建立一個快捷圖標web
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
activity的名稱、圖標能夠和應用程序的名稱、圖標不相同算法
android:icon="@drawable/ic_launcher" android:label="@string/app_name"
栗子瀏覽器
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <!-- 第一個Activity配置清單 --> <activity android:icon="@drawable/f000" android:name="com.istarry.activity2.MainActivity" android:label="@string/app_name" > //========================================================================= <intent-filter> <!-- 設置入口Activity,每一個 <intent-filter>會生成一個新的圖標 --> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 第二個Activity配置清單 --> <activity android:icon="@drawable/f000" android:name="com.istarry.activity2.SecondActivity" android:label="@string/app_name" > <!-- <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> --> </activity>
顯式:指定目標Activity的包名和類名app
隱式:指定目標Activity的action和dataui
當隱式啓動指定的Action與多個Activity匹配時,會彈出選擇列表this
/** 啓動撥打電話的Activity @param v */ public void click(View v){ //隱式意圖 Intent intent = new Intent(); intent.setAction(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:110")); //隱式跳轉 startActivity(intent); } public void click3(View v){ //顯式意圖 Intent intent = new Intent(); //arg0:目標Activity所在的項目的應用包名 //arg1:目標Activity的包名和類名 intent.setClassName(packageContext, className); } /** 啓動第二個自定義Activity */ public void click2(View v){ //顯式意圖 Intent intent = new Intent(); //指定目標,設置參數1(上下文)參數2(指定目標Activity的字節碼文件) intent.setClass(this, SecondActivity.class); //顯式跳轉 startActivity(intent); }
/** * 隱式啓動第二個自定義Activity */ public void click4(View v){ //隱式意圖 Intent intent = new Intent(); intent.setAction("com.istarry.suiyi"); //隱式跳轉 startActivity(intent); }
隱式啓動自定義Activity須要配置清單文件操作系統
<intent-filter> <action android:name="com.istarry.suiyi" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter>
/** * 隱式啓動第二個自定義Activity */ public void click4(View v){ //隱式意圖 Intent intent = new Intent(); intent.setAction("com.istarry.suiyi"); //設置數據 intent.setData(Uri.parse("suiyixie:xxxxxx")); //若是沒有指定Category,會自動添加Category intent.addCategory("android.intent.category.DEFAULT"); //隱式跳轉 startActivity(intent); }
清單文件code
<intent-filter> <action android:name="com.istarry.suiyi" /> <data android:scheme="suiyixie" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter>
---補充對象
//隱式意圖 Intent intent = new Intent(); intent.setAction("com.istarry.suiyi"); /*設置mimeType,必須與清單文件配置的同樣 intent.setType("text/name"); //設置數據 intent.setData(Uri.parse("suiyixie:xiaoming")); */ //setType與setData不能共存,要用下面的方法 intent.setDataAndType(Uri.parse("suiyixie:xiaoming"), "text/name"); //若是沒有指定Category,會自動添加Category intent.addCategory("android.intent.category.DEFAULT"); //隱式跳轉 startActivity(intent);
清單文件
<intent-filter> <action android:name="com.istarry.suiyi" /> <data android:scheme="suiyixie" /> <!-- 約定俗成,能夠自定義mimeType --> <data android:mimeType="text/name"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter>
OnDestroy:此時Activity就死掉了
使用場景
若是應用的Activity進入stop和pause狀態,在內存不足時,應用會被殺死,選擇被殺死的目標是用 LRU(最近最少使用)算法
onCreate-->onStart-->onResume-->onPause-->onStop-->onDestory
onStart-->onResume-->onPause-->onStop
onResume-->onPause
每一個應用會有一個Activity任務棧,存放已啓動的Activity
Activity的啓動模式,修改任務棧的排列狀況
singeTask 單一任務棧,在當前任務棧裏面只能有一個實例存在
singleInstance啓動模式很是特殊, activity會運行在本身的任務棧裏面,而且這個任務棧裏面只有一個實例存在
默認狀況下 ,橫豎屏切換, 銷燬當前的activity,從新建立一個新的activity
快捷鍵ctrl+F11
在一些特殊的應用程序常見下,好比遊戲,不但願橫豎屏切換activity被銷燬從新建立
需求:禁用掉橫豎屏切換的生命週期
橫豎屏寫死
android:screenOrientation="landscape" android:screenOrientation="portrait"
讓系統的環境 再也不去敏感橫豎屏的切換。
android:configChanges="orientation|screenSize|keyboardHidden"
Activity經過Intent啓動時,能夠經過Intent對象攜帶數據到目標Activity
Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("maleName", maleName); intent.putExtra("femaleName", femaleName); startActivity(intent);
在目標Activity中取出數據
Intent intent = getIntent(); String maleName = intent.getStringExtra("maleName"); String femaleName = intent.getStringExtra("femaleName");
步驟: 1. 開啓activity而且獲取返回值
startActivityForResult(intent, 0);
在新開啓的界面裏面實現設置數據的邏輯
Intent data = new Intent(); data.putExtra("phone", phone); //設置一個結果數據,數據會返回給調用者 setResult(0, data); finish();//關閉掉當前的activity,纔會返回數據
在開啓者activity裏面實現方法 onActivityResult(int requestCode, int resultCode, Intent data) 經過data獲取返回的數據