1. 程式人生 > >Android建立活動筆記二

Android建立活動筆記二

1.使用Intent在不同的活動之間進行互動

Intent是Android程式中各元件進行互動的一種重要方式,它不僅可以指明當前元件想要執行的動作,還可以在不同元件之間傳遞資料,Intent可以用於啟動活動、服務和傳送廣播等場景,Intent有顯式和隱式兩種。

1.1使用顯式的Intent

首先我們需要構造出來一個Intent,可以通過建構函式,進行構造,

Intent intent=new Intent(FirstActivity.this,SecondActivity.class);

第一個引數是context,第二個引數是我們想要啟動的活動所對應的類,然後可以通過startActivity()方法來啟動活動。

1.2使用隱式的Intent

隱式Intent是通過指定更加抽象的action和category等資訊,來交給系統去分析,來找到合適的Intent去啟動。可以通過在<activity>標籤中配置<intent-filter>指定當前活動能夠響應的aciton和category,如下:

<intent-filter>
                <action android:name="android.intent.action.CALL" />
               <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

這裡就表示我們建立的活動可以響應android.intent.action.CALL這個action,而category標籤指定當前活動能夠響應的Intent中可能還帶有的category。

1.3向下一個活動傳遞資料

Intent除了可以啟動一個活動以外,還可以在啟動活動的時候傳遞資料,思路是通過Intent中提供的一系列putExtra()方法的過載,把我們想要傳遞的資料儲存在Intent中,然後在啟動另外一個活動以後,將這些資料取出就行了。

 String data="Hello SecondActivity";
                Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
                intent.putExtra("extra_data",data);
                startActivity(intent);

被啟動的活動裡的程式碼:

Intent intent=getIntent();
        String data=intent.getStringExtra("extra_data");
        Log.d("SecondActivity",data);

1.4返回資料給上一個活動

Activity中有一個方法startActivityForResult()也可以啟動活動,並且在活動銷燬的時候能夠返回結果給上一個活動,該方法有兩個引數,第一個是Intent,第二個引數是請求碼。當被呼叫的活動被銷燬的時候在此之前我們需要通過setResult()方法返回資料,該方法有兩個引數,第一個用於向上一個活動返回處理結果,第二個把帶有資料的Intent傳遞回去,然後再呼叫finish()方法來銷燬當前活動。當活動銷燬時,會呼叫上一個活動的onActivityResult()方法。該方法有三個引數,第一個是requestCode,即我們在啟動活動時傳入的請求碼,第二個是resultCode,即我們在返回資料時傳入的處理結果,第三個是帶有資料的Intent, 啟動另外一個活動

  Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
                startActivityForResult(intent,1);

銷燬被啟動的活動並返回資料

 Intent intent=new Intent();
                intent.putExtra("data_return","HelloActivity");
                setResult(RESULT_OK,intent);
                finish();

獲取返回的資料

  switch (requestCode){
            case 1:
                if (resultCode==RESULT_OK){
                    String returnedData=data.getStringExtra("data_return");
                    Log.d("FirstActivity",returnedData);
                }
                break;
            default:
        }

2.活動的生命週期

2.1返回棧

我們每啟動一個活動,就會覆蓋在原活動之上,然後點選Back鍵就會銷燬最上面一個活動,下面的一個活動就會重新顯示出來。Android使用任務來管理活動,一個任務就是一組存放在棧裡的活動的集合,這個棧也被稱為返回棧(具有先進後出的特性)。

2.2活動狀態

每個活動在其宣告週期中最多可能有4種狀態。

2.2.1 執行狀態

當一個活動位於返回棧的棧頂時,該活動就處於執行狀態。系統不會回收處於執行狀態的活動

2.2.2暫停狀態

當一個活動不再處於棧頂位置,但仍然可見時,這時活動就進入了暫停狀態,就是當處於執行狀態的活動沒有佔滿整個手機螢幕時,後面的活動依然可見,比如,一個對話方塊處於最前面,它後面的活動,依然可見。這種活動依舊是完全存活的,只有在記憶體極低的時候,系統才會去回收這種活動。

2.2.3停止狀態

當一個活動不再處於棧頂位置,並且完全不可見時,就進入了停止狀態。系統仍然會為這種活動儲存相應的狀態和成員變數。當其他地方需要記憶體時,該狀態的活動有可能會被系統回收。

2.2.4銷燬狀態

當一個活動從返回棧中移除後就變成了銷燬狀態,系統最傾向於回收這種狀態的活動,從而保證手機的記憶體充足。

2.3活動的生存期

Activity類定義了7個回撥方法,覆蓋了活動宣告週期的每一個環節。

  • onCreate() :該方法會在活動第一次建立的時候呼叫。
  • onStart():該方法在活動由不可見變為可見的時候呼叫。
  • onResume() 該方法在活動那個準備好和使用者進行互動的時候呼叫,此時的活動一定位於返回棧的棧頂,並且處於執行狀態。
  • onPause() 該方法在系統準備去啟動或恢復另外一個活動的時候呼叫。一般在這裡將一些消耗CPU的資源給釋放掉,以及儲存一些關鍵資料。
  • onStop() 該方法在活動完全不可見的時候呼叫,它和onPause()的區別是,如果啟動的新活動時一個對話方塊式的活動,那麼onPause()就會得到執行,onStop()並不會得到執行。
  • onDestroy() 該方法在活動被銷燬之前呼叫,之後活動的狀態將會變為銷燬狀態。
  • onRestart() 這個方法在活動由停止狀態轉為執行狀態之前呼叫。