1. 程式人生 > >Android Activity的生命週期

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 處於什麼狀態呢?又會呼叫什麼方法~~~~~哈哈,看懂上面的,我就不解釋啦;

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