顯示具有 Activity 標籤的文章。 顯示所有文章
顯示具有 Activity 標籤的文章。 顯示所有文章

星期五, 11月 04, 2011

實作並觀察Activity生命週期

Android應用程式學習筆記

實作說明: 試著觀察生命週期。我們運行兩個activity,並複寫所有生命週期中的回調方法,通過activity A啟動activity B和activity B啟動activity A觀察兩個activity的生命週期變化。

Activity A(HelloActivityActivity):


  1. package test.activity;

  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.Button;

  7. public class HelloActivityActivity extends Activity {
  8.     /** Called when the activity is first created. */
  9. private Button mBtn;
  10.     @Override
  11.     public void onCreate(Bundle savedInstanceState) {
  12.      //初始化所有成員變數
  13.         super.onCreate(savedInstanceState);
  14.         setContentView(R.layout.main);
  15.         System.out.println("Activity1---onCreate");
  16.         mBtn = (Button)findViewById(R.id.button1);
  17.     }

  18.     public void GoToActivity2(View view){
  19.      Intent intent = new Intent(HelloActivityActivity.this , activity2.class);
  20.      startActivity(intent);
  21.     }
  22. @Override
  23. protected void onDestroy() {
  24. // TODO Auto-generated method stub
  25. //釋放所有資源
  26. super.onDestroy();
  27. System.out.println("Activity1---onDestory");
  28. }

  29. @Override
  30. protected void onPause() {
  31. // TODO Auto-generated method stub
  32. //此方法執行後,activity失去用戶焦點,
  33. super.onPause();
  34. System.out.println("Activity1---onPause");
  35. }

  36. @Override
  37. protected void onRestart() {
  38. // TODO Auto-generated method stub
  39. super.onRestart();
  40. System.out.println("Activity1---onRestart");
  41. }

  42. @Override
  43. protected void onResume() {
  44. // TODO Auto-generated method stub
  45. //此方法執行後,activity取得用戶焦點,
  46. super.onResume();
  47. System.out.println("Activity1---onResume");
  48. }

  49. @Override
  50. protected void onStart() {
  51. // TODO Auto-generated method stub
  52. //此方法執行後,用戶看的見activity,置方法監控影響UI的事件,隨時隨環境變化UI
  53. super.onStart();
  54. System.out.println("Activity1---onStart");
  55. }

  56. @Override
  57. protected void onStop() {
  58. // TODO Auto-generated method stub
  59. //此方法執行後,用戶無法看見activity,釋放所有在onStart()所有監控影響UI的方法
  60. super.onStop();
  61. System.out.println("Activity1---onStop");
  62. }
  63.     
  64. }
Activity B(activity2):
  1. package test.activity;

  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.Button;

  7. public class activity2 extends Activity {
  8. private Button mBtn; 

  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. // TODO Auto-generated method stub
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.layout2);
  14. System.out.println("activity2---onCreate");
  15. mBtn = (Button)findViewById(R.id.button1);
  16. }
  17. public void BackToActivity1(View view){
  18. Intent intent = new Intent(activity2.this , HelloActivityActivity.class);
  19. startActivity(intent);
  20. }

  21. @Override
  22. protected void onDestroy() {
  23. // TODO Auto-generated method stub
  24. super.onDestroy();
  25. System.out.println("activity2---onDestory");
  26. }

  27. @Override
  28. protected void onPause() {
  29. // TODO Auto-generated method stub
  30. super.onPause();
  31. System.out.println("activtiy2---onPause");
  32. }

  33. @Override
  34. protected void onRestart() {
  35. // TODO Auto-generated method stub
  36. super.onRestart();
  37. System.out.println("activity2---onRestart");
  38. }

  39. @Override
  40. protected void onResume() {
  41. // TODO Auto-generated method stub
  42. super.onResume();
  43. System.out.println("activity2---onResume");
  44. }

  45. @Override
  46. protected void onStart() {
  47. // TODO Auto-generated method stub
  48. super.onStart();
  49. System.out.println("activity2---onStart");
  50. }

  51. @Override
  52. protected void onStop() {
  53. // TODO Auto-generated method stub
  54. super.onStop();
  55. System.out.println("activity2---onStop");
  56. }


  57. }

實驗一:執行activity A後關閉,觀察生命週期變化。
變化如下圖。

發現一個activity開始運行到出現在屏幕上會經過生命週期為onCreate()->onStart()->onResume(),關閉activity會經過生命週期為onPause()->onStop()->onDestory()。
實驗二:執行activity A後,A啟動activity  B,B再啟動A,接著按"BACK"直到結束整個activity,觀察生命週期變化。
變化如下圖。
觀察activity A啟動時會經過生命週期onCreate()->onStart()->onResume(),A啟動activity B會經過生命週期就比較複雜,首先要啟動B,A會先onPause(),接著換B要運行了,B會執行onCreate()->onStart()->onResume(),B取得用戶焦點,因此,A執行onStop()。執行到此我們來想想task狀態,task目前總共放有兩個activity,下層是最先執行的A,頂層是從A啟動的B,而從B啟動的A正在執行。現在接著按"BACK"按鈕,觀察A先執行onPause()讓在task頂層的B恢復,B執行onRestart()->onStart()->onResume(),A執行onStop()->onDedtory(),A結束,再按一次"BACK"按鈕,觀察B一樣先執行onPause()讓task中剩下的A恢復,A執行onRestart()->onStart()->onResume(),B執行onStop()->onDestory(),B結束,再按一次"BACK"按鈕,應用程式關閉,A執行onPause()->onStop()->onDestory(),A結束。


星期日, 10月 30, 2011

Activity (八)

Android應用程式學習筆記

Coordinating activities

Activity A 啟動 Activity B的流程:
1.執行Activity A的onPause()方法。
2.依序執行Activity B的onCreate()、onStart()、onResume()方法。
3.然後,如果Activity A不再顯示在屏幕,執行onStop()方法。

了解流程可以幫助你管理從activity轉換到另一個activity的資訊。比如,你必須在第一個activity停止前將數據寫入資料庫,如此讓接下來的activtiy可以讀取,你應該在onPause()方法執行寫入資料庫的工作,而不是onStop()。

Activity (七)

Android應用程式學習筆記

接著Activity (六)的內容繼續學習。

然而,即使你沒做甚麼和沒有實現onSaveInstanceState()方法,Activity類預設實現onSaveInstanceState()方法還保存一些activity狀態。特別的是,預設會為布局的每個視圖呼叫onSaveInstanceState()方法,允許每個視圖提供應該被儲存的資訊,在Android架構下幾乎每個部件都會實現這個方法,這樣當你的activity再次建立時,在使用者介面上的任何可見的改變都可以自動保留儲存起來。比如,EditText部件會保存用戶輸入的文字,CheckBox部件保存用戶是否check。這些只會在當你提供你想保存狀態的部件的ID(android:id屬性)才有作用,如果部件沒有ID,就無法保存狀態。

雖然預設會執行onSaveInstanceState()方法來保存與activity的使用者介面有關的有用資訊,你仍可能需要複寫onSaveInstanceState()方法來保存額外資訊。比如,你可能需要保存在activity的生命中改變的變數值。

因為預設實現的onSaveIntanceState()方法幫助儲存使用者介面的狀態,如果你複寫此方法來保存額外資訊,你應該在執行任何工作之前呼叫superclass實現onSaveInstanceState()

測試你的應用程式有能力保存狀態的做簡單方法就是轉動裝置,讓屏幕方向改變。當屏幕方向改變,系統為了恢復資源銷毀又在建立activity可能利用為新的方向,單獨為此理由,你的activity能保存轉動屏幕的狀態是重要的,這樣用戶就不會經常在使用應用程式時還要轉動屏幕。

以下圖示,左邊顯示當activity被停止然後恢復,activity的狀態保持原封不動。右邊顯示當activity被銷毀然後再次建立,activity必須保存先前的activity狀態。


Activity (六)

Android應用程式學習筆記

Saving activity state

介紹Managing the Activity Lifecycle簡單地提到在activity被暫停或是停止,狀態是可以被保留的。這是真的,因為在暫停或停止時,Activity物件仍保留在記憶體中-所有有關的資訊及目前狀態仍是活的。因此用戶在activity上產生的任何改變都會保留在記憶體中,以便當activity回到前台,這些改變仍能存在。

然而當系統為了恢復記憶體而銷毀activity,Activity物件就會被銷毀,所以無法輕易以它完整無缺的狀態恢復activity。代替的方法就是,如果用戶操作回到activity,系統必須再次建立Activity物件。到目前為止,用戶不會察覺系統銷毀activity並重新建立activity,因此期望activity能精確地回到之前的狀態。在此情況下,你能擔保有關activity狀態的重要資訊被保存下來,藉著實現額外的回調方法來保存有關你的activity狀態的資訊然後在系統重新建立activity時恢復。

保存與目前activity狀態有關的資訊的回調方法為onSaveInstanceState()方法,系統呼叫此方法之前,使activity容易銷毀,並傳入Bundle物件。Bundle物件是你保存與activity有關的狀態資訊的地方,比如鍵值對,利用一些方法將值放入Bundle物件,比如putString()。然後,如果系統殺掉你的activity後用戶操作回到你的activity,系統將Bundle物件傳到onCreate()方法,所以你可以恢復到在onInstanceState()方法中保存的activity狀態。如果沒有任何資訊需要恢復,Bundle傳入onCreate()方法為null。


星期六, 10月 29, 2011

Activity (五)

Android應用程式學習筆記

我們把生命周期的所有回調方法列在以下表中,對每個回調方法進行描述以及它是否可以被系統殺掉。


MethodDescriptionKillable after?Next
onCreate()Always followed by onStart().當activity第一次被建立時呼叫該方法,該方法用來完成靜態設置-建立視圖、為lists綁定數據等等。該方法傳入一個Bundle物件的參數,Bundle物件包含了activity前一次的狀態。該方法執行完後,接著一定執行onStart()方法。NoonStart()
    onRestart()
Activtiy已經被停止之後,再次啟動前呼叫onRestart()方法。接著執行的一定是onStart()方法。
NoonStart()
onStart()Activity在讓用戶看見之前呼叫該方法。如果activity到達前台,呼叫onResume()方法;如果activity隱藏起來,呼叫onStop()方法。NoonResume()
or
onStop()
    onResume()在activity開始與用戶互動之前呼叫該方法。Activity在此點是位在activity佇列的頂端,可以接收用戶的輸入。接著一定呼叫onPause()方法。NoonPause()
onPause()當系統開始恢復其他activity時呼叫此方法。該方法是典型用來將為儲存的變動交給永久數據、停止動畫及其他可能會消耗CPU的工作,onPause()裡的工作應該盡可能快速地完成,因為下一個activity將不會被恢復,直到onPause()裡的工作完成。
如果activity回到前台,接著就會呼叫onResume()方法;如果變成用戶看不見,接著就會呼叫onStop()方法。
YesonResume()
or
onStop()
onStop()當activity不再被用戶看見時呼叫onStop()方法,不被用戶看見有可能是因為activity即將被銷毀或是其他的activity已經恢復且覆蓋activity。
如果activity正回來與用戶互動,就會接著呼叫onRestart()方法;如果activity正要停止,接著就會呼叫onDestory()方法。
YesonRestart()
or
onDestroy()
onDestroy()Activity銷毀之前呼叫該方法,這是activity最後接收的呼叫。可能因為activity正在停止(呼叫finish()方法),或是因為系統臨時銷毀activity的使用空間。你可以利用isFinishing()方法分辨這兩個種可能。Yesnothing
注意"Killalbe after"是表示系統是否會在回調方法執行完後的任何時間殺掉activity。三個回調方法標記為"Yes",分別是onPause()、onStop()、onDestroy(),因為onPause()方法是三個方法的第一個,activity一旦被建立,onPause()方法肯定是在程序被殺掉之前最後呼叫的方法-如果系統必須緊急恢復記憶體空間,接著onStop()和onDestroy()可能不會被呼叫。因此你應該利用onPause()方法將決定性數據寫到記憶體。然而你應該選擇保留一些資訊,因為在方法中的任何阻礙程序會阻塞轉到下一個activity而降低用戶經驗。

表記為"No"的回調方法,保護程序不會被殺掉。因此當activity是可被殺的,從onPause()時段到onResume()時段,直到再次呼叫onPause()方法,activity才又可以被殺掉。

Activity (四)

Android應用程式學習筆記

Shutting Down an Activity

呼叫finish()方法就可以關閉activity,你也可以從另外一個activity呼叫finishActivity()方法關閉activity。


Managing the Activity Lifecycle

藉由回調方法管理activity的生命週期對於開發強健且靈活的應用程式來說是相當重要的,activity的生命週期直接受到與它相關的其他activity,它的task及back stack所影響。

activity有三個基本的狀態:
Resumed
Activity運行在前台且擁有用戶焦點。
Paused
其他Activity運行在前台且擁有用戶焦點,但是activity仍是可見的,那就是其他activities顯示在它的上面,其他activtiy部分是透明的或是不會完全覆蓋整個屏幕。被暫停的activity仍是活的,但是系統可能在極低記憶體的狀態下殺掉被暫停的activity。 
Stopped
Activity完全被其他activtiy遮掩(activity現在運行於後台),被停止的activity也仍是活的,然而被停止的activity不會被用戶看見且它可能被系統殺掉,當系統需要記憶體空間時。
如果activity處在暫停或是停止狀態,系統可以從記憶體停止這些activity,不論是要求它們結束或是殺掉它們的程序,當'它們再次被啟動,再全部重建。


Implementing the lifecycle callbacks

當activity轉換狀態,會接收許多回調方法通知。所有回調方法都可以複寫來完成在狀態改變時適合的工作,以下就是生命週期中所有回調方法:



public class ExampleActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // The activity is being created.
    }
    @Override
    protected void onStart() {
        super.onStart();
        // The activity is about to become visible.
    }
    @Override
    protected void onResume() {
        super.onResume();
        // The activity has become visible (it is now "resumed").
    }
    @Override
    protected void onPause() {
        super.onPause();
        // Another activity is taking focus (this activity is about to be "paused").
    }
    @Override
    protected void onStop() {
        super.onStop();
        // The activity is no longer visible (it is now "stopped")
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // The activity is about to be destroyed.
    }
}


這些方法定義了activtiy的整個生命週期,藉由實現這些方法,你可以注意到在生命週期中有三個巢狀迴圈:

  • Entire lifetime-Activity的entire lifetime發生在呼叫onCreate()方法與呼叫onDestory()方法之間,你的activity應該在onCreate()方法中設置"總體"狀態(比如定義布局),在onDestory()方法中釋放所有剩下的資源。例如,如果你的activity有一個執行緒在後台執行從網路下載資料的工作,activtiy在onCreate()方法中建立執行緒,而在onDestory()方法中停止執行緒。
  • Visible lifetime-Activity的visible lifetime發生在呼叫onStart()方法與onStop()方法之間,在此時段中,用戶可以在屏幕上看見activity並與它互動。例如,當新的activity啟動而activity不再可見時,onStop()方法被呼叫。在onStart()與onStop()之間,你可以保有顯示activity給用戶的資源。例如,你可以在onStart()方法註冊BroadcastReciever監視影響UI的改變,在onStop()方法撤銷BroadcastReciever。系統可能在activity的生命週期中多次呼叫onStart()方法和onStop()方法,當activity對於用戶為可見與隱藏之間交替時。
  • Foreground lifetime-Activity的foreground lifetime發生在呼叫onResume()方法與呼叫onPause()方法之間,在此時段中,activity在屏幕上是在所有其他activity前面且擁有用戶焦點。activity會頻繁地轉進與轉出前台,例如,當裝置進入睡眠狀態時呼叫onPause()方法,或是當一個對話框出現。因為經常在此狀態轉換,這兩個方法在程式碼中應該要公平,避免變慢造成用戶在此狀態轉換時需要等待。
下圖顯示這些loops及兩狀態之間的路徑。

在這裡做個小小總結:

1.關閉activity有兩個方法,呼叫finish()及finishActivity()。
2.Activtiy生命週期中有三個迴圈,Entire lifetime、Visible lifetime、Foreground lifetime。
3.Entire lifetime為onCreate()與onDestory()之間,為activity的整個生命週期,主要執行取得資源與釋放資源的工作。
4.Visible lifetime為onStart()與onStop()之間,為activity可以被看見的時間,主要執行與使用者介面相關的工作。
5.Foreground lifetime為onResume()與onPause()之間,為activity被用戶使用的時間。
6.當執行到onCreate()時,用戶還未看見activity,當執行到onStart()時,用戶才看見activtiy。

星期三, 10月 26, 2011

Activity (三)

Amdroid應用程式學習筆記

Starting an Activity

你可以呼叫startActivity()啟動其他activity,傳入Intent物件來描述你想啟動的activity,Intent不是明確指定你想起動的activity就是描述你想執行的動作類型(系統會為你挑選適合的activity,可能是不同應用程式的activity),Intent物件也可以攜帶小量的數據到你想啟動的activity使用。

當你在自己的應用程式完成啟動其他activity,通常都是啟動已知的activity,你可以建立一個intent明確地用類別名稱定義你想啟動的activity是哪個,以下就是一個activity如何啟動另一個名稱為SignInActivity的activity的例子。


Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);

然而,你的應用程式也想執行一些動作,例如發送電子郵件、編輯簡訊或是狀態更新,既然這樣,你的應用程式也許沒有自己的activities可以執行這些動作,所以你可以使用在裝置上其他應用程式所提供的activity,且這些activity可以執行動作。這是intent有價值的地方-你可以建立一個intent描述你想執行的動作,然後系統啟動來自其他應用程式適合的activity。如果有許多activity都可以完成intent描述的動作,用戶可以選擇其中一個使用。舉例,你想允許用戶寄發電子訊息,你可以如此建立intent:


Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
startActivity(intent);

EXTRA_EMAIL額外加到intent的是電子郵件地址的字串陣列,當電子郵件應用程式回應這個intent,應用程式讀取intent中的字串陣列。在此狀況,電子郵件應用程式啟動,用戶用完,你的activity就會恢復。


Starting an activity for a result


有時候你可能想要從你啟動的activity接收結果,既然這樣,呼叫startActivityForResult()方法啟動activity取代startActivity()方法,從被啟動的activity接收結果,實現onActivityResult()回調方法,以下為如何建立intent與處理結果:


private void pickContact() {
    // Create an intent to "pick" a contact, as defined by the content provider URI
    Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
    startActivityForResult(intent, PICK_CONTACT_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // If the request went well (OK) and the request was PICK_CONTACT_REQUEST
    if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {
        // Perform a query to the contact's content provider for the contact's name
        Cursor cursor = getContentResolver().query(data.getData(),
        new String[] {Contacts.DISPLAY_NAME}, null, null, null);
        if (cursor.moveToFirst()) { // True if the cursor is not empty
            int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
            String name = cursor.getString(columnIndex);
            // Do something with the selected contact's name...
        }
    }
}

在此例子中,演示了你使用onActivityResult()方法處理activity結果的基本邏輯,第一個條件式檢查請求是否成功-如果成功,resultCode為RESULT_OK-回應的請求是否已知,requestCode配對startActivytForResult()的第二個參數。

contentResolver執行查詢,回傳一個Cursor物件,通過cursor物件讀取結果。

星期二, 10月 25, 2011

Activity (二)

Android應用程式學習筆記

Creating an Activity


建立一個activity,你必須建立Activity類的子類,在子類,你需要實現回調方法,系統會在activity專換不同生命週期狀態時呼叫,比如,activity建立、停止、恢復、銷毀,兩個最重要的回調方法是:
onCreate()
你必定實現此方法,系統建立你的activity時呼叫此方法,在實現此方法中,你應該初始化你的activity中重要的變數。最重要的是,這是你必須呼叫setContentView()方法去顯示activity的使用者介面的地方。
onPause()
當用戶離開你的activity時,系統呼叫此方法, 這通常是你應該堅持保存任何改變超過目前用戶的使用期間。


Implementing a user interface

 Activity的使用者介面是由view的階層所提供,每個view控制activity的視窗中特定的矩形空間,並且可以回應用戶的互動,比如,view可以是一個按鈕,當用戶觸碰它時啟動動作。

Android提供許多現成的views,你可以使用來設計及組織你的布局,"Widget"是view,桌面的小工具,"Layouts"由ViewGroup衍生的View,比如,線性布局或是相關布局,你可以運用view及viewgroup來創造你的桌面小工具或是布局,然後應用在你的activity上。

使用view定義布局最普遍的方式是存在你的應用程式資源中的XML布局文件,這樣的方式,你可以維護從定義應用程式行為的程式碼中分離的使用者介面的設計。你可以利用setContentView()方法傳入布局文件的ID,將布局文件設置為使用者介面。


Declaring the activity in the manifest

你必須在manifest文件中宣告你的activity,這樣系統才可以存取。宣告activity,打開你的manifest文件,並在<application>標籤範圍內加入<activity>標籤。例如:


<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...</manifest >

有許多屬性你可以包含在此標籤中去定義activity的屬性,比如activity的標題、activity的圖像或是activity的使用者介面主題風格。android:name屬性是唯一一定要有的屬性。一旦你發行了應用程式,你就不應該改變這個名稱,因為如果你改變了,可能會破壞一些功能,比如,應用程式的捷徑。


Using intent filters

<activity>標籤也可以利用<intent-filter>指定多個intent過濾器,為了就是讓其他應用程式也可以活化它。

當你使用Android SDK工具建立新的應用程式時,工具自動地為你建立activity,它包含一個intent過濾器用來回應"main"動作,intent過濾器看起來像:


<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<action>標籤指定了activity是應用程式的"main"的進入點,<category>標籤指定該activity應該被列表在系統上,讓用戶可以啟動它。

如果你不想允許你的應用程式受其他應用程式的activities活化,那你就不需要任何intent過濾器,只需要有"main"action和"Launcher"cagetory。

然而,如果你想你的activity回應從其他應用程式傳來的明確intent,那就必須為你的activity另外加上intent過濾器,每個過濾器必須有<intent-filter>標籤,<intent-filter>標籤必須包含<action>標籤,選擇性包含<category>標籤及<data>標籤,這些標籤決定你的activity回應那一種形式的intent。

星期四, 9月 22, 2011

Activtiy (一)

Android應用程式學習筆記

Activities

Activity是應用程式的組件之一,提供能與使用者互動的屏幕,比如,撥打電話、接聽電話、寄送電子郵件或者觀看地圖。每個activity是一特定視窗,在視窗你繪製它的使用者介面。視窗一般是填滿整個屏幕,但是也可能小於屏幕。

應用程式通常由許多activities組成,且彼此之間並沒有太緊密的連結。通常情況下,應用程式中的一個activity為"main"activity,該activity在應用程式第一次啟動時顯示給使用者。每個activity皆能啟動其他activities去執行不同的動作。每次一個新的activity啟動,前一個activity就會停止,但是系統會保留前一個activity於佇列(back stack)中。當新的activity啟動時,新的activity就會被放入佇列(back stack)中,並取得使用者的焦點。佇列遵守了"先進後出"的特性,所以,當使用者用完目前的activity且按下"BACK"鍵時,目前的activity就會被拋出佇列並銷毀,而前一個activity恢復運行。

當一個activity因為新的activity啟動而停止,它會通過activity的生命週期的回呼方法來通知狀態上的改變,一個activity可能接收許多個回呼方法,基於狀態的改變-不論是系統創建、停止、恢復或銷毀activity-且每個回呼方法都提供你機會去執行適合改變狀態的工作。例如,當activity停止,你的activity應該釋放較大的物件,比如,網路或資料庫的連結,當activity恢復,你可以重新獲得必需的資源。


以上是官網的內容,看起來真的有些霧煞煞。以下就做個小小總結。
總結:
Activity並沒有適合的翻譯,我們就都用activity來說吧。
Activity是android應用程式中四種組件其中一種,它是使用者與應用程式互動的接口,使用者操作應用程式都是透過activity來完成的,比如點擊按鈕或填寫一些內容等等。它有自己的生命週期,生命週期中有許多狀態,每個狀態都有一個回呼方法,當activity狀態改變時會回呼對應的方法來完成狀態改變所需要執行的工作。

星期六, 9月 03, 2011

activity生命週期

Android應用程式學習筆記

activity生命週期

activity生命週期中有七個函式

onCreate()-當activity第一次被啟動的時候,就會調用onCreate方法。
1.設定activity的layout文件
2.對按鈕綁定監聽器
等等靜態設定。

onStart()-當activity能被用戶看到的時候,就會調用onStart方法。

onResume()-當activity成為用戶的焦點時,也就是說用戶可以在activity上與應用程式互動時候,就會調用onResume方法。

onDestory()-
1.如果我們在程式碼裡,明確地調用activity的finish方法,就會調用onDestory方法。
2.當Android系統資源不夠用的時候,也會調用onDestory方法。

onPause()-當activity(第一個)調用其他activity(第二個)時,第一個activity就會調用onPause方法,此時我們可以在onPause方法中,將一些數據存起來,等到第二個activity結束後,回到第一個activity時,再讀取數據,繼續剛剛的動作。

onStop()-當其他activity被啟動後,遮擋到原先的activity,使原先的activity不被用戶看的見,此時就會調用原先activity的onStop方法。

onRestart()-當其他activity結束,回到原先的activity時,原先的activity就會調用它的onRestart方法。

星期五, 9月 02, 2011

activity與intent

Android應用程式學習筆記
activity 與 intent

多個activity之間的關係
絕大多數的應用程式都是由多個activities組成,而activity之間的關係,如何切換,如何傳遞數據。
1.多個activities有可在同一個應用程式當中,這些activities組成了一個完整的應用程式。
2.兩個或多個應用程式的activity之間。
在以上兩種情況,activities都可以透過intent互相切換與傳遞數據。

intent的基本作用
首先,intent的英文意義是"意圖",我們在這裡可以把intent理解成一個請求物件,其次,在這一物件包含了一系列的信息,分為以下六類,而對我們最為重要的是component name、action、data、extras。
1.Component name-我們想請求的組件的名稱,也就是說我們想啟動哪一個activity的名稱。
2.Action-一個動作,當這一組件拿到了intent這一請求後,這組件要執行甚麼樣的動作,也就是說當我們啟動了另一個activity後,希望activty做哪些動作,就是由action指定的。
3.Data-一個activity向另一個activity傳送的數據。
4.Category
5.Extras-額外的信息。
6.Flags

例子
當activity(Activity01)要切換到另一個activity(Activity02),該怎麼做?
這個時候需要調用第一個activity(Activity01)的startActivity()方法並傳一個Intent的物件進來,那究竟要切換到哪一個activity(Activity02),或者切換到另一個activity後,另一個activity究竟做甚麼事情,都是由intent物件來決定的,因此在多個activities之間跳轉,intent起了非常重要的作用。

Intent intent = new Intent();
intent.setClass(Activity01.this , Activity02.class);
startActivity(intent);

activity

android應用程式筆記

Activity的作用
1.做為一個activity來講,它是使用者與應用程式互動的一個接口,使用者操作應用程式都是透過activity來完成的,比如點擊按鈕或填寫一些內容等等。
2.做為一個activity來講,裡面可以放置各種各樣的控制件,所以我們也可以說activity是一個控制件的容器。

建置activity上有一些要點以及流程
1.一個activity就是一個類別,並且繼承自Activity。
2.複寫onCreate方法,onCreate方法會在activity第一次被運行的時候被掉用。
3.每一個activity都必須在AndroidManifest.xml文件當中進行宣告。
4.為activity添加必要的控制件。在layout的文件夾當中,新增一個xml文件,在xml當中添加控制件以及介面的布置,最後我們可以在程式當中透過findViewById方法來取得控制件,當然控制件必須在之前就賦予相對應的id,並且設定控件的樣式與內容。