Android Activity的生命周期結(jié)構(gòu)
下圖是官網(wǎng)的Activity生命周期結(jié)構(gòu)圖,從這個(gè)圖中可以看出Activity的生命周期函數(shù)挺多的,其實(shí)他的生命周期和以往我們看到的其他組件的生命周期一樣,都是從創(chuàng)建到銷毀的過(guò)程,只不過(guò)之間多加了幾個(gè)生命周期函數(shù),將他的生命周期細(xì)化了。
首先看到的事onCreate()函數(shù),顧名思義這個(gè)函數(shù)在Activity開始創(chuàng)建時(shí)調(diào)用,可以在其中定義一些初始化操作。接下來(lái)是 onStart()方法,這個(gè)方法在Activity開始被執(zhí)行時(shí)調(diào)用,它緊隨onCreate()方法之后調(diào)用,接著是onResume()方法,這個(gè) 方法對(duì)我們來(lái)說(shuō)算是比較陌生的,這個(gè)方法是在該Activity或得用戶輸入焦點(diǎn)時(shí)被調(diào)用,這個(gè)或得用戶輸入焦點(diǎn)有點(diǎn)不好理解,如果我們用過(guò) Android手機(jī)或者其他系統(tǒng)的手機(jī)時(shí),經(jīng)常會(huì)看到有些窗口雖然能看到但無(wú)法對(duì)他進(jìn)行操作,這時(shí)的Activity就沒(méi)有或得用戶焦點(diǎn)。當(dāng)這個(gè)方法調(diào)用 后Activity開始真正的運(yùn)行了,在Activity正在運(yùn)行時(shí)用戶激活了另一個(gè)Activity,這時(shí)將調(diào)用***個(gè)Activity的 onPause()方法,可以理解為***個(gè)Activity被暫停了,這個(gè)時(shí)候如果系統(tǒng)的內(nèi)存不夠用,***個(gè)Activity的進(jìn)程可能被停止(何時(shí)被停 止是由系統(tǒng)決定的,不需要我們參入),當(dāng)下次我們?cè)龠\(yùn)行***個(gè)Activity時(shí)就需要重新創(chuàng)建這個(gè)Activity,那就又需要調(diào)用 onCreate()方法。如果在這個(gè)Activity沒(méi)有被停止的情況下,我們重新調(diào)用***個(gè)Activity,就會(huì)直接調(diào)用它的onResume() 方法后開始運(yùn)行。如果***個(gè)Activity很久都沒(méi)有得到再次運(yùn)行機(jī)會(huì),就會(huì)調(diào)用onStop()被停止,這時(shí)如果Activity又或得用戶輸入焦 點(diǎn),就會(huì)調(diào)用onRestart()方法,重新開始執(zhí)行這個(gè)Activity,或者被系統(tǒng)停止,否則調(diào)用onDestroy()方法銷毀 Activity。其實(shí)在實(shí)際開發(fā)中我們很少會(huì)用到所有的生命周期函數(shù),但我們要弄清它的原理,在使用時(shí)知道所以然就行了。
下面來(lái)看一個(gè)實(shí)例
***個(gè)Activity的布局文件(main.xml):
Xml代碼
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello"
- />
- <Button
- android:id="@+id/myButton"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/first_button"
- />
- </LinearLayout>
第二個(gè)Activity的布局文件(Second.xml):
Xml代碼
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="mars.activity05"
- android:versionCode="1"
- android:versionName="1.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".FirstActivity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity android:name=".SecondActivity"
- android:label="SecondActivity"
- android:theme="@android:style/Theme.Dialog"/>
- </application>
- <uses-sdk android:minSdkVersion="4" />
- </manifest>
FirstActivity.java:
Java代碼
- package mars.activity05;
- 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 {
- /** Called when the activity is first created. */
- private Button myButton;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- System.out.println("FirstActivity ---> onCreate ");
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- myButton = (Button) findViewById(R.id.myButton);
- myButton.setOnClickListener(new ButtonListener());
- }
- @Override
- protected void onDestroy() {
- // TODO Auto-generated method stub
- System.out.println("FirstAcvity --->onDestory");
- super.onDestroy();
- }
- @Override
- protected void onPause() {
- // TODO Auto-generated method stub
- System.out.println("FirstAcvity --->onPause");
- super.onPause();
- }
- @Override
- protected void onRestart() {
- // TODO Auto-generated method stub
- System.out.println("FirstAcvity --->onRestart");
- super.onRestart();
- }
- @Override
- protected void onResume() {
- // TODO Auto-generated method stub
- System.out.println("FirstAcvity --->onResume");
- super.onResume();
- }
- @Override
- protected void onStart() {
- // TODO Auto-generated method stub
- System.out.println("FirstAcvity --->onStart");
- super.onStart();
- }
- @Override
- protected void onStop() {
- // TODO Auto-generated method stub
- System.out.println("FirstAcvity --->onStop");
- super.onStop();
- }
- class ButtonListener implements OnClickListener {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- Intent intent = new Intent();
- intent.setClass(FirstActivity.this, SecondActivity.class);
- FirstActivity.this.startActivity(intent);
- }
- }
- }
SecondActivity.java:
Java代碼
- package mars.activity05;
- 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{
- private Button secondButton;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- System.out.println("SecondActivity--->onCreate");
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.second);
- secondButton = (Button)findViewById(R.id.secondButton);
- secondButton.setOnClickListener(new ButtonListener());
- }
- @Override
- protected void onDestroy() {
- // TODO Auto-generated method stub
- System.out.println("SecondActivity--->onDestory");
- super.onDestroy();
- }
- @Override
- protected void onPause() {
- // TODO Auto-generated method stub
- System.out.println("SecondActivity--->onPause");
- super.onPause();
- }
- @Override
- protected void onRestart() {
- // TODO Auto-generated method stub
- System.out.println("SecondActivity--->onRestart");
- super.onRestart();
- }
- @Override
- protected void onResume() {
- // TODO Auto-generated method stub
- System.out.println("SecondActivity--->onResume");
- super.onResume();
- }
- @Override
- protected void onStart() {
- // TODO Auto-generated method stub
- System.out.println("SecondActivity--->onStart");
- super.onStart();
- }
- @Override
- protected void onStop() {
- // TODO Auto-generated method stub
- System.out.println("SecondActivity--->onStop");
- super.onStop();
- }
- class ButtonListener implements OnClickListener{
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- Intent intent = new Intent();
- intent.setClass(SecondActivity.this, FirstActivity.class);
- SecondActivity.this.startActivity(intent);
- }
- }
- }