Android基礎_Activity

1、Activity負責Android應用的界面處理工作,用於顯示界面與用戶進行交互
2、Activity中頁面內容由layout文件夾下xml文件決定
3、四大組件之一,需要在AndroidMainfest.xml文件中進行配置



Activity運行狀態:
    運行態Running/Active、暫停態Paused、停止態Stopped、終止態Destroyed Killed
  • 運行態:(可見、有焦點)在屏幕最前端,處於棧最頂端,處於可見有焦點(可以與用戶交互)狀態
  • 暫停態:(可見、無焦點)被一個透明或者Dialog樣式的Activity覆蓋時的狀態,依然與窗口管理器保持鏈接,系統繼續維護其內部狀態,仍然可見,但是失去焦點不可與用戶進行交互
  • 停止態:(不可見、無焦點)被新的Activity覆蓋,失去焦點,不可見
  • 終止態:(不可見、無焦點)被系統殺死回收,或者沒有被啓動時,調用Acticity.finish();方法只是告訴Activity Manager該Activity已完成它的工作,可以被回收。可以決定一個Activity的“生”,但是不能決定Acticity“



Activity聲明週期:
  • onCreate(Bundle savedlnstanceState);一個Activity的實例被啓動時調用的第一個方法   主要完成初始化操作。也可從savedlnstanceState中讀取保存到存儲設備中的數據,但是要判斷是否爲null,因爲第一次啓動並沒有數據存諸到設備中
  • onStart(); 該方法在onCreate方法後被調用,或者在 Stop狀態轉到Active狀態時調用
  • onRestart(); Pause狀態轉換到Active狀態時被調用。
  • onResume(); 處於Active狀態
  • onPaust(); Active 狀態轉換到 Pause 狀態時被調用。
  • onStop(); Active 狀態轉換到 Stop 狀態時被調用。一般我們在這裏保存 Activity 的狀態信息。
  • onDestroy(); 被結束時調用,它是被結束時調用的最後一個方法,在這裏一般做些釋放資源,清理內存等工作。



Activity啓動和關閉:
activity的啓動:
  • 直接啓動:startActivity(intent):
  • 帶返回值的啓動:需要在另一個Activity中執行一些操作,然後將操作數據的結果返回給當前Activity(例如買東西)
啓動操作Activity(購買界面):startActivityForResult(Intent intent,int requestCode);關閉操作類返回數據(是否購買等操作):setResult(int resultCode,Intent data);finish();獲取操作結果(獲取購買信息):onActivityResult(int requestCode, int resultCode, Intent data)判斷請求碼和響應碼,然後通過intent類型的data進行響應的處理
activity的關閉
  • finish();調用後會以此執行:onPause();-->onStop();-->onDestroy();如果該Activity已經處於停止狀態則只執行onDestroy();
  • finishActivity(int requestCode);通過request參數來關閉相應的Activity,需要是通過startActivityForResult();啓動的
        
Activity棧:
Android是通過一種Activity棧的方式來管理Activity的,一個Activity的實例的裝填決定他在棧中的位置。處於前臺的Activity總是處在棧的頂端。當處於前臺的Activity因爲異常或其他原因被銷燬時,處於棧第二層的Activity將被激活,上浮到棧頂。當新的Activity啓動,原來的前臺Activity將會壓入棧的第二層。不再棧頂的Activity都有可能被系統銷燬回收資源
Activity棧的加載模式有四種:standard標準啓動模式(默認模式)、singleTop、singleTask單棧模式、singleInstance在ActivityManifest.xml中的activity借點下定義 android:launchMode="";
standard:intent將發送新的實例,每次跳轉都會生成新的Activity
singleTop:在請求Activity在棧頂時,不構建新的實例
singleTask:只創建一個實例,當intent傳來,需要創建設置爲singleTask的Activity的時候,系統會檢查棧裏面是否已經有該Activity的實例,如果有直接將intent發送給他
singleInstance:將Activity單獨放入一個棧中,這樣這個棧中就只有這一個Activity,不同應用的intent都由這個Activity接收和展示,不管誰調用,都是調用這個棧中的實例

Acticity通信:
    使用Intent通信:
  • 將信息放到Bundle中,通過傳遞Bundle對象來傳遞信息
  • 直接將信息放到Intent中進行傳遞
    使用SharedPreferences
    SharedPreferences是使用xml格式爲Android應用提供一種永久的數據貯存方式,可以被處在同一個應用中的所有的Activity訪問

Acticity的Intent Filter
    Intent Filter描述了一個組件願意接收什麼樣的Intent對象,Android將其抽象爲android.content.InteneFilter類在Android的AndroidManifest.xml配置文件中可以通過<intent-filter>節點爲一個Activity指定其IntentFilter,告訴系統該Activity可以響應什麼類型的Intent


Action匹配:
    Action是一個用戶定義的字符串,用於描述一個Android應用程序組件,一個IntentFilter可以包含多個Action。在AndroidManifest.xml的Activity定義時可以在其<intent-filter>節點指定一個Action列表用於標示Activity所能接受的“動作”

<intent-filter>

    <action android:name="android.intent.action.MAIN">

    <action android:name="com.ztt.MyAction">

</intent-filter>

使用Action啓動一個Activity:

Intent intent = new Intent();

intent.setAction("com.ztt.MyAction");

Android系統自定義了一一些列特定的系統動作。這些Action通過常量的方式定義在android.content.Intent中,以“ACTION_”開頭。

<intetn-filter>

    <action android:name="android.intent.action.MAIN">

    <category android:name="android.intent.category.LAUNCHER">

</intent-filter>

這個IntentFilter決定了點擊圖標啓動的Activity

只有action android:name="android.intent.action.MAIN"和android:name="android.intent.category.LAUNCHER"同時存在的時候纔會出現在Launcher中出現圖標。當一個程序中多個Activity都設置了這兩個IntentFilter則會出現多個圖標,點擊進入相應的Activity

URI數據匹配:
一個Intent可以通過URI攜帶外部數據給目標組件,在<intent-filter>節點中,通過<data/>節點匹配外部數據。
mimeType屬性指定攜帶外部數據的數據類型,scheme指定協議,host、port、path指定數據的位置、端口、路徑
如果在IntentFilter中指定了這些屬性,那麼只有在所有屬性都匹配成功時URI數據匹配纔會成功

Category類別匹配
<intent-filter>節點中可以爲組件定義一個Category類別列表,當Intent中含有這個列表的所有項目時Category類別匹配纔會成功。


Activity運行時屏幕方向:
<activity android:screenOrientation="portrait">// 值爲portrait爲豎屏,landscape時爲橫屏
</activity>
或者在java代碼中:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)(橫屏)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)(豎屏)
去掉標題欄:(標題欄一般不直接使用系統標題欄,標題操作省略)
requestWindowFeature(Window.FEATURE_NO_TITLE);
設置全屏模式,去掉狀態欄:
getWindow().setFlage(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_Fullscreen);




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