1. 程式人生 > >Android 四大元件之——Acitivity(一)

Android 四大元件之——Acitivity(一)

一,什麼是Activity

activity是Android元件中最基本也是最為常見用的四大元件之一。Android四大元件有Activity,Service服務,Content Provider內容提供,BroadcastReceiver廣播接收器。

Activity中所有操作都與使用者密切相關,是一個負責與使用者互動的元件。

二,Activity的生命週期


上圖是官方給出的Activity生命週期圖,其實這張圖就能完整描述了Activity的宣告週期,但初學者可能會不太理解。結合上圖來逐一分析。

Activity的生命週期方法有onCreate(), onStart(), onResume(), onPause(), onStop(), onRstart(), onDestroy()。

onCreate()   Activity的建立時會呼叫此方法

onStart()   Activity在可見時呼叫此方法,此時是不能操作的,只有獲取焦點後才能進行互動

onResume()  Activity獲取焦點,此時使用者可以進行互動操作

onPause() Activity失去焦點時呼叫此方法,比如在Activity中彈出對話方塊時,Activity失去焦點

onStop()     Activity不可見時呼叫此方法,比如按下Home鍵回到桌面

onRstart()     Activity從新可見時呼叫此方法,比如從桌面返回Activity


onDestroy() 退出Activity時呼叫此方法,比如按返回鍵退出當前Activity


Activity 生命週期方法的呼叫在不同場景呼叫有所不同


場景一,  開啟Activity,按返回鍵退出Activity

Activity 的生命週期方法呼叫的順序為: onCreate()——>onStart()——>onResume()——>onPause()——>onStop()——> onDestroy();

場景二,開啟Activity,按下home鍵,然後重新進到介面

Activity 的生命週期方法呼叫的順序為 onCreate()——>onStart()

——>onResume()——>onPause()——>onStop()——> onRestart()——>onResume();

場景三,開啟Activity,點選Activity中的某個按鈕彈出對話方塊,然後返回到當前Activity

當前Activity 的生命週期方法呼叫的順序為 onCreate()——>onStart()——>onResume()——>onPause()——>onResume()

大概舉這幾個栗子。其他的類似分析即可


三,如何啟動Activity

android四大元件都可以通過Intent來啟動,其中Activity的啟動有兩種:startActivity(intent); startActivityForResult(intent,requestCode);

Intent intent=new Intent(this,TargetActivity.class);
intent.put("key","value");
startActivity(intent);
其中第二行程式碼表示需要傳遞的資料鍵值對,那麼當跳轉到TargetActivity時,以此為慄可以通過如下程式碼獲取傳遞的資料

Intent intent=getIntent();
String val=intent.getStringExtras("key");
其中val就是獲取到的值,當然在實際開發中intent 還可傳遞不同型別的資料,具體傳遞什麼值具體分析,然後根據相應型別獲取對應的值即可。

Activity的第二中啟動為startActivityForResult(intent,requestCode); 當我們需要從目標Activity返回時希望獲取某些資料時可使用此方法

Intent intent =new Intent(this,TargetActivity.class);

startActivityForResult(intent,requestCode);
此方法的第二個引數為請求碼,用來標識不同的請求,同時必須重寫回調方法

 // 回撥方法,從第二個頁面回來的時候會執行這個方法  
    @Override  
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        String val= data.getStringExtra("key");  
        // 根據上面傳送過去的請求嗎來區別  
        switch (requestCode) {  
        case 0:  
           //處理程式
            break; 
        default:  
            break;  
        }  
    }  
而在TargetActivity中,在返回時需要新增如下程式碼

        Intent mIntent = new Intent();  
        mIntent.putExtra("key", "hello");  
        // 設定結果,並進行傳送  
        this.setResult(resultCode, mIntent);  


此時,Activity的基礎介紹完了,在下一篇部落格中將會進一步介紹Activity,敬請關注