Activity的生命週期

Activity

注:生命週期的狀態切換隻存在於activity內部對象之間。

1、              是應用程序的入口

2、              負責創建窗口,用戶交互等

3、              一個程序可能有多個activity

使用方法:繼承自android.app.Activity

          Override onCreate()

          setContentView()顯示視圖

          findViewByld()實例化組件

          androidManifest.xml—>application標籤裏聲明

          指定程序運行時首先家在的Activity,定義action和category

 

Activity的生命週期

Activity有三種狀態,分別爲:

運行狀態:當activity在屏幕的最前端(位於當前堆棧的頂部)它是可見的有焦點的,可以用力進行用戶的操作(點擊,雙擊,長按等),那麼就叫做激活或者運行狀態。值得注意的是,當activity處於運行狀態的時候,android會儘可能的保持它的運行,即使出現內存不足等情況,android也會先殺死堆棧底部的activity,來確保運行狀態的activity正常運行。

暫停狀態:在某種情況下,activity對用戶來說,仍然是可見的,但不再擁有焦點,即用戶對它的操作是沒有實際意義的。在這個時候它就屬於暫停狀態。例如:當最前端的activity是個透明或者美歐全屏,那麼下層仍然可見的activity就是暫停狀態。暫停的activity仍然是激活的(它保留所有的狀態和成員信息並保持與activity管理器連接),但當內存不足時,可能會被殺死。

注:不是所有的activity失去焦點就會進入暫停狀態。

停止狀態:當activity完全不可見時,它就處於停止狀態。它仍然保留着當前狀態和成員信息。然而這些對用戶來說,都是不可見的;同暫停狀態一樣,當系統其他地方需要內存時,它也有被殺死的可能。

生命週期事件:activity狀態的變化是人爲操作的,而這些狀態的改變,也會觸發一些事件。我們且叫他的生命週期事件一共有七個。如圖:

Void onCreate(Bundle savedInstanceState)

void onStart()

void onRestart()

void onResume()

void onPause()

void onStop()

void onDestroy()

當打開一個activity,如果該activity實例不存在於activity管理器中,就會觸發onCreate事件。Activity的實例不是我們自己創建的。是android系統自己創建的。接下來是onStart事件,然後是onResume事件,此時activity就處於了運行狀態。

 

接下來看看在各種情況下的狀態轉換:

第一:

1、運行activity之後的狀態轉換:

package cn.lyhz;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

 

public class TestActivity extends Activity {

    private static final String TAG = "myTest";

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        Log.i(TAG,"onCreate");

    }

protected void onDestroy() {

           //Log.i(TAG,"onDestroy");

           super.onDestroy();

}

protected void onPause() {

           Log.i(TAG,"onPasume");

           super.onPause();

}

protected void onRestart() {

           Log.i(TAG,"onRestart");

           super.onRestart();

}

protected void onResume() {

           Log.i(TAG,"onResume");

           super.onResume();

}

protected void onStart() {

           Log.i(TAG,"onstrat");

           super.onStart();

}

protected void onStop() {

           Log.i(TAG,"onStop");

           super.onStop();

}

}

2、點擊紅色圈住得那個按鈕(返回鍵),會發生的狀態是

onPasume—onStop—onDestroy

一般不會發生onDestroy事件,除非是有意的把一個activity關閉,Destroy之後是無法再返回的。

 

點擊小房子後,運行的狀態爲onPesume—onStop,這是壓棧的過程

返回之後再長按home鍵(小房子)重新回到activity,它的運行狀態是onRestart—onStart—onResume,也就是出棧的過程。

第二:

寫兩個activity互相切換

package cn.lyhz;

 

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

 

public class SecondActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

           // TODO Auto-generated method stub

           super.onCreate(savedInstanceState);

           setContentView(R.layout.seconde);

           Button backB = (Button)findViewById(R.id.backB);

           backB.setOnClickListener(new OnClickListener() {

                    public void onClick(View v) {

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

                             startActivity(intent);

                    }

           });

}

}

點擊按鈕,運行組狀態是onPasume—onStop會切換到另一個界面。

 

點擊返回按鈕,它的運行狀態是onCreate—onStart—onResume,點擊手機自帶的返回按鈕的運行狀態是

onRstart—onStart—onResume(這是出棧的過程)

第三:(半透明定的效果,創建了一個對話框樣式activity)

 

 

點擊this is maDialog按鈕就會出現這個結果,這是的狀態爲onPesume暫停狀態,這是把它放到了棧裏面。再點擊手機自帶的返回按鈕,他回出棧,狀態爲onResume

2、package cn.lyhz;

 

import android.app.Activity;

import android.app.AlertDialog;

import android.app.AlertDialog.Builder;

import android.content.DialogInterface;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

 

public class FirstActivity extends Activity {

    private static final String TAG = "myTest";

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        Log.i(TAG,"onCreate");

       

        Button goB = (Button)findViewById(R.id.goB);

        goB.setOnClickListener(new OnClickListener() {

                   

                    public void onClick(View v) {

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

                             startActivity(intent);

                    }

           });

          

        Button showMyDialog = (Button)findViewById(R.id.showMyDialog);

        showMyDialog.setOnClickListener(new View.OnClickListener() {

                   

                    public void onClick(View v) {

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

                             startActivity(intent);

                    }

           });

       

        Button showAlertDialogB = (Button)findViewById(R.id.showAlertDialog);

        showAlertDialogB.setOnClickListener(new View.OnClickListener() {

                   

                    public void onClick(View v) {

                             showAlertDialog();

                             Log.i(TAG,"showAlertDialog");

                    }

           });

    }

   

    public void showAlertDialog(){

    AlertDialog.Builder builder = new Builder(FirstActivity.this);

    builder.setMessage("確認退出麼?");

    builder.setTitle("提示");

    builder.setPositiveButton("確定",

                        new android.content.DialogInterface.OnClickListener() {

                   

                    public void onClick(DialogInterface dialog, int which) {

                             dialog.dismiss();

                             FirstActivity.this.finish();

                    }

           });

   

    builder.setNegativeButton("

取消", new android.content.DialogInterface.OnClickListener() {

                   

                    public void onClick(DialogInterface dialog, int which) {

                             dialog.dismiss();

                            

                    }

           });

    builder.create().show();

    }

protected void onDestroy() {

           Log.i(TAG,"onDestroy");

           super.onDestroy();

}

protected void onPause() {

           Log.i(TAG,"onPasume");

           super.onPause();

}

protected void onRestart() {

           Log.i(TAG,"onRestart");

           super.onRestart();

}

protected void onResume() {

           Log.i(TAG,"onResume");

           super.onResume();

}

protected void onStart() {

           Log.i(TAG,"onstrat");

           super.onStart();

}

protected void onStop() {

           Log.i(TAG,"onStop");

           super.onStop();

}

}

創建的真正的對話框點擊取消是沒有任何反應的(不能觸發FirstActivity的狀態),而點擊確定狀態是onPesume—onStop—onDestroy

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章