ANDROID(一)
Activity
1.什麼是Activity? 請描述一下生命周期
Activity:
一個Activity是一個應用程式元件,提供一個螢幕,使用者可以用來互動為了完成某項任務,例如撥号、拍照、發送email、看地圖。每一個activity被給予一個視窗,在上面可以繪制使用者接口。視窗通常充滿螢幕,但也可以小于螢幕而浮于其它視窗之上
一個程式一般由多個Activity組成,各activities之間關系很松散,它們之間沒有直接的關聯。必須有一個activity被指定為Main activity,它是程式啟動時首先顯示的界面。每個activity都可以随意啟動其它的activity。每當一個activity被啟動,則前一個activity就被停止。一個程式中的所有啟動的activity都被放在一個棧中,是以被停止的activity并沒有銷毀,而在存于棧中。新啟動的activity先被存放于棧中,然後獲得輸入焦點。在目前活動的activity上點傳回鍵,它被從棧中取出,然後銷毀,然後上一個activity被恢複。當一個activity因為新的activity啟動而被停止時,它會收到狀态變化的通知,這樣的變化有多個,每個都會引起系統調用一個相應的回調方法以通知activity,這些回調方法被統稱為“生命周期回調方法”。這些回調方法分别在Activity被建立、停止、恢複、銷毀時被調用。
生命周期:
在 android 中,Activity 擁有四種基本狀态:
-
- Active/Runing一個新 Activity 啟動入棧後,它在螢幕最前端,處于棧的最頂端,此時它處于可見并可和使用者互動的激活狀态。
- Paused 當 Activity 被另一個透明或者 Dialog 樣式的 Activity 覆寫時的狀态。此時它依然與視窗管理器保持連接配接,系統繼續維護其内部狀态,是以它仍然可見,但它已經失去了焦點故不可與使用者互動。
- Stoped 當 Activity 被另外一個 Activity 覆寫、失去焦點并不可見時處于 Stoped狀态。
- Killed Activity 被系統殺死回收或者沒有被啟動時處于 Killed狀态。
當一個 Activity 執行個體被建立、銷毀或者啟動另外一個 Activity 時,它在這四種狀态之間進行轉換,這種轉換的發生依賴于使用者程式的動作。下圖說明了 Activity 在不同狀态間轉換的時機和條件:
圖 1. Activity 的狀态轉換

-
- protected void onStart()該方法在 onCreate() 方法之後被調用,或者在 Activity 從 Stop 狀态轉換為 Active 狀态時被調用。
- protected void onResume()在 Activity 從 Pause 狀态轉換到 Active 狀态時被調用。
- protected void onResume()在 Activity 從 Active 狀态轉換到 Pause 狀态時被調用。
- protected void onStop()在 Activity 從 Active 狀态轉換到 Stop 狀态時被調用。一般我們在這裡儲存 Activity 的狀态資訊。
- protected void onDestroy()在 Active 被結束時調用,它是被結束時調用的最後一個方法,在這裡一般做些釋放資源,清理記憶體等工作。
圖 3. 這些方法的調用時機
共有七個周期函數:
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
在Activity顯示的過程中會依次調用OnCreate、onStart和OnResume,在Activity銷毀的過程中,會依次調用onPause、onStop和onDestroy.在執行onStop過程中Activity重新獲得了焦點,系統會調用
onRestart方法,之後調用onStart和onResume方法
1.完整生命周期: 即一個activity從出現到消失,對應的周期方法是從onCreate到onDestroy
2.可見生命周期: 從onStart()到onStop()方法,在這個周期中,使用者可以看見Activity,但不一定能夠與之互動,這兩個方法可以随着狀态的變化被執行多次。
3.前景生命周期: 從onResume()到onPause()方法,在這個周期中,Activity處在其它Activity之前,即在Activity棧的最頂端,負責與使用者進行互動,伴随着狀态的變化,這兩個方法可以被執行多次
2.Activity調用的幾種方法
顯示啟動Activity
顯示啟動activity
Intent intent = new Intent(this,MyActivity.class);
startActivity(intent);
啟動一個activity并擷取結果
startActivityForResult();
(回來時調用onActivityResult())
隐式啟動Activity
指定Activity Action:
例如,你想讓使用者發送一個電子郵件,你可以建立以下的Intent:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
startActivity(intent);
關閉Activity
Activity可以内部調用finish()方法關閉它自己,也可以調用finishActivity()方法關閉其它的activity、
3.在Activity之間如何傳遞資料
四種方法:
Intent對象
例如:Intent intent = new Intent(this,MyActivity.class);
intent.putExtra("intent_int",300);
startActivity(intent);
擷取:
int demo = getIntent().getExtras().getInt("intent_int");
靜态變量
将類的成員定義成public static
剪切闆
不過隻能傳文本資料以及Intent對象支援的資料
全局對象
可以為應用程式定義一個全局變量,繼承application
4.兩個Activity之間跳轉時必然會執行的是哪幾個方法
onCreate():在activity生命周期開始時調用
onRestoreInstanceState():用來恢複UI狀态
onRestart():當activity重新啟動時調用
onStart():當activity對使用者即将可見時調用
onResume():當activity與使用者互動時,繪制界面
onSaveInstanceState():當activity即将移除棧頂保留UI狀态時被調用
onPause():暫停目前活動的activity,送出持久資料的改變,停止動畫和其他占用CPu資源的東西,由于下一個activity在這個方法傳回之前不會resume,是以這個方法的代碼執行要快
onStop():activity不再可見時調用
onDestroy():在activity銷毀棧時被調用的最後一個方法
5.橫豎螢幕切換時候activity的生命周期
①不設定activity的android:configChanges時,切屏會重新調用各個生命周期,切橫屏時會執行一次,且豎屏時會執行兩次
②設定activity的android:configChanges=”orientation"時,切屏還是會調用各個生命周期,切橫屏,豎屏時隻會執行一次
③設定activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調用各個生命周期,隻會執行onConfigurationChanged方法
6.你背景的Activity被系統回收怎麼辦?
系統會幫我們記錄下回收之前Activity的狀态,再次調用被回收的Activity就要重新調用onCreate()方法,不同于直接啟動的是這回onCreate()裡面帶上參數savedInstanceState,savedInstanceState是一個Bundle對象,基本上可以把它了解為系統幫你維護的一個map對象,使用它可以恢複到回收前的狀态
7.如何将一個activity設定為視窗的樣式
①在你的style.xml檔案中可以建立一如下的類似Dialog的style:
<style name="Theme.FloatActivity" parent="android:style/Theme.Dialog></style>
②在AndroidManifest.xml中在你需要顯示為視窗的activity中添加如下屬性:
android:theme="@style/Theme.FloatActivity"即可
也可以直接添加對應需要展示為Dialog style的activity的android:theme屬性值為:android:theme="@android:style/Theme.Dialog"
轉載于:https://www.cnblogs.com/daimingming/p/3352425.html