天天看點

Android常見面試題(一)

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 擁有四種基本狀态:

    1. Active/Runing一個新 Activity 啟動入棧後,它在螢幕最前端,處于棧的最頂端,此時它處于可見并可和使用者互動的激活狀态。
    2. Paused 當 Activity 被另一個透明或者 Dialog 樣式的 Activity 覆寫時的狀态。此時它依然與視窗管理器保持連接配接,系統繼續維護其内部狀态,是以它仍然可見,但它已經失去了焦點故不可與使用者互動。
    3. Stoped 當 Activity 被另外一個 Activity 覆寫、失去焦點并不可見時處于 Stoped狀态。
    4. Killed Activity 被系統殺死回收或者沒有被啟動時處于 Killed狀态。

當一個 Activity 執行個體被建立、銷毀或者啟動另外一個 Activity 時,它在這四種狀态之間進行轉換,這種轉換的發生依賴于使用者程式的動作。下圖說明了 Activity 在不同狀态間轉換的時機和條件:

圖 1. Activity 的狀态轉換
Android常見面試題(一)
    1. protected void onStart()該方法在 onCreate() 方法之後被調用,或者在 Activity 從 Stop 狀态轉換為 Active 狀态時被調用。
    2. protected void onResume()在 Activity 從 Pause 狀态轉換到 Active 狀态時被調用。
    3. protected void onResume()在 Activity 從 Active 狀态轉換到 Pause 狀态時被調用。
    4. protected void onStop()在 Activity 從 Active 狀态轉換到 Stop 狀态時被調用。一般我們在這裡儲存 Activity 的狀态資訊。
    5. protected void onDestroy()在 Active 被結束時調用,它是被結束時調用的最後一個方法,在這裡一般做些釋放資源,清理記憶體等工作。
圖 3. 這些方法的調用時機
Android常見面試題(一)

共有七個周期函數: 

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棧的最頂端,負責與使用者進行互動,伴随着狀态的變化,這兩個方法可以被執行多次

Android常見面試題(一)

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