Android Activity的生命週期

轉載地址:http://testerhome.com/topics/2475

今天 閒着沒事,研究了下 Android 中 Activity 的生命週期,目前有所領悟,本次內容主要是以實踐爲主,圖文結合哈~

一、android 中的 Activity的活動狀態,主要分爲 4中狀態:
1、運行
2、暫停
3、停止
4、銷燬

二、活動的聲明週期
Android 中的Activity 類中共定義了 7個回調方法

1、onCreate()
2、onStart()
3、onResume()
4、onPause()
5、onStop()
6、onDestroy()
7、onRestart()

三、3中生存週期

以上的7個方法中,除了onRestart()方法,其他的都是兩兩相對應的;

1、完整生命週期
活動在onCreate() 和 onDestroy();

2、可見生存週期

活動在onStart() 和 onStop()

3、前臺生存週期

活動在 onResume() 和 onPause()

四、活動週期示意圖:

五:身臨其境

接下來我麼來實戰一下,需求如下:

需求:

實現一個應用中的從主界面分別跳轉到其他的2個界面

步驟:

1、新建一個項目,命名爲ActivityLifeCyle 
2、分別創建2個 xml 文件;normal_activity.xml 、dialog_activity.xml
3、分別創建2個類,NormalActivity.java 、DialogActivity.java
4、在main_activity.xml 文件添加2個 button
5、在MainActivity 中寫如界面跳轉動作意圖 --》 Intent
6、在AndroidManifest.xml 文件中 註冊 NormalActivity.java 、DialogActivity.java

主要代碼如下:

1、MainActivity.java

public class MainActivity extends Activity {

    public static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        Button startNormalActivity = (Button)findViewById(R.id.bt1);
        Button startDialogActivity = (Button)findViewById(R.id.bt2);
        startNormalActivity.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO 自動生成的方法存根
                Intent intent = new Intent(MainActivity.this,NormalActivity.class);
                startActivity(intent);

            }
        });

        startDialogActivity.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO 自動生成的方法存根
                Intent intent = new Intent(MainActivity.this,DialogActivity.class);
                startActivity(intent);

            }
        });






    }

    @Override
    protected void onStart() {
        // TODO 自動生成的方法存根
        super.onStart();
        Log.d(TAG, "onStart");
    }

    @Override
    protected void onRestart() {
        // TODO 自動生成的方法存根
        super.onRestart();
        Log.d(TAG, "onRestart");
    }

    @Override
    protected void onResume() {
        // TODO 自動生成的方法存根
        super.onResume();
        Log.d(TAG, "onResume");
    }

    @Override
    protected void onPause() {
        // TODO 自動生成的方法存根
        super.onPause();
        Log.d(TAG, "onPause");
    }

    @Override
    protected void onStop() {
        // TODO 自動生成的方法存根
        super.onStop();
        Log.d(TAG, "onStop");
    }

    @Override
    protected void onDestroy() {
        // TODO 自動生成的方法存根
        super.onDestroy();
        Log.d(TAG, "onDestroy");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

接下來,我們就開始把應用程序部署到我們真機或模擬器上,

我一開是 部署的時候,我們中Logcat 中可以看到如下信息:






彙總圖:

六:總結

以上就是一個程序的運行週期,每一個動作需要用到的那些方法,當然具體的什麼是 運行、停止、暫停啊,這些原理性的東東,度娘、Google 都可以搜索的到的,這裏面就沒有詳細的說明,不懂的或者不理解的,自行查找哈,

本例中,還有個動作沒有演示,就是在MainActivity 界面按Home鍵,此時MainActivity 處於什麼狀態呢?又會調用什麼方法~~~~~哈哈,看懂上面的,我就不解釋啦;

源代碼地址:鏈接:http://pan.baidu.com/s/1mgqrMdU 密碼:kljd

大家,可以自己寫寫,或者下載上面的代碼玩一玩,印象很深刻的哈~~~~~


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