Android學習筆記(4)——Activity生命周期


Android應用程序由很多的Activity組成,本例將簡單說明Activity的生命周期過程:


new一個Android應用程序,其中先new兩個Activity用來演示(FirstActivity、SecondActivity):

FirstActivity:

布局first.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FirstActivity" >

    <Button
        android:id="@+id/myButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_first" />

</RelativeLayout>

對應的FirstActivity.java:

package com.example.activity_04;

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 FirstActivity extends Activity {

    private Button myBtn;
    
    class BtnClickListener implements OnClickListener{
        @Override
        public void onClick(View arg0) {
            Intent intent=new Intent();
            intent.setClass(FirstActivity.this, SecondActivity.class);
            FirstActivity.this.startActivity(intent);
        }
    }    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        System.out.println("FirstActivity ---> onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first);
        myBtn=(Button)findViewById(R.id.myButton);
        myBtn.setOnClickListener(new BtnClickListener());
    }

    @Override
    protected void onStart() {
        System.out.println("FirstActivity ---> onStart");
        super.onStart();
    }

    @Override
    protected void onRestart() {
        System.out.println("FirstActivity ---> onRestart");
        super.onRestart();
    }

    @Override
    protected void onResume() {
        System.out.println("FirstActivity ---> onResume");
        super.onResume();
    }

    @Override
    protected void onPause() {
        System.out.println("FirstActivity ---> onPause");
        super.onPause();
    }

    @Override
    protected void onStop() {
        System.out.println("FirstActivity ---> onStop");
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        System.out.println("FirstActivity ---> onDestroy");
        super.onDestroy();
    }
    
}

重寫了Activity生命周期內的七個重要事件:onCreate、onStart、onResume、onPause、onStop、onRestart、onDestory

在他們被執行時,分別輸出"Activity名 ---> 事件名",

同樣的方式new一個SecondActivity

布局second.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SecondActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_second" />

</RelativeLayout>

對應的SecondActivity.java:

package com.example.activity_04;

import android.app.Activity;
import android.os.Bundle;

public class SecondActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        System.out.println("SecondActivity ---> onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);
    }

    @Override
    protected void onStart() {
        System.out.println("SecondActivity ---> onStart");
        super.onStart();
    }

    @Override
    protected void onRestart() {
        System.out.println("SecondActivity ---> onRestart");
        super.onRestart();
    }

    @Override
    protected void onResume() {
        System.out.println("SecondActivity ---> onResume");
        super.onResume();
    }

    @Override
    protected void onPause() {
        System.out.println("SecondActivity ---> onPause");
        super.onPause();
    }

    @Override
    protected void onStop() {
        System.out.println("SecondActivity ---> onStop");
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        System.out.println("SecondActivity ---> onDestroy");
        super.onDestroy();
    }
}

需要觀察System.out輸出的信息,需要添加輸出log的過濾器

1.打開DMMS頁:

2.添加一個過濾器

3.輸入過濾器想要過濾出的內容:

過濾器過濾出的信息將會被顯示在LogCat窗口中


啟動Android模擬器,運行一下程序,分別執行以下步驟,觀察System.out的輸出:

1.啟動程序,首先打開的是FirstActivity(之前已在AndroidManifest.xml中配置):

觀察輸出如下:

2.點擊FirstActivity中的Button,切換到SecondActivity:

觀察輸出如下:

3.點擊Android模擬器的返回按鈕,跳轉回FirstActivity:

觀察輸出如下:

4.再次點擊FirstActivity中的Button,切換到SecondActivity:

觀察輸出如下:


總結如下:

一個Activity的創建順序執行:onCreate,onStart,onResume

從FirstActivity啟動SecondActivity時,順序調用:FirstActivity的onPause,然后SecondActivity的onCreate,onStart,onResume,最后是FirstActivity的onStop

七大事件:

onCreate:
  當這個Activity第一次被創建的時候調用,在里面去設置布局文件、或者對按鈕綁定監聽器等一些靜態的操作;

onStart:
  當這個Activity能被看到的時候調用;

onResume:
  當這個Activity能獲得用戶焦點,用戶能操作這個Activity的時候調用;

onPause:
  當要啟動另一個Activity時調用,例如當你的程序在運行時,有一個來電,系統調用電話,你的程序被遮擋住時調用,一般在里面寫一些保存當前Activity操作數據的代碼,以便恢復操作時還原數據;

onStop:
  當這個Activity對用戶而言不可見的時候調用,如果上一個Activity調用出來的是一個小的對話塊,沒能完全遮擋住這個Activity,則不會調用上一個Activity的onStop;

onRestart:
  當一個Activity對用戶不可見了以后,但是沒有被銷毀,再次要顯示的時候,就最先調用onRestart,而不需要再調用onCreate;

onDestory:
  銷毀Activity,如果你在代碼里明確調用了finish方法,則會調用銷毀,或者當系統資源不夠用的時候,也會自動銷毀不可見的Activity,如果再啟用已經被銷毀的Activity時,需要再調用onCreate;


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM