Android Activity的生命周期结构

移动开发 Android
本文将从Android官方网站的Activity生命周期结构图讲起,教我们弄清所有的生命周期函数的原理,用实例表现Android Activity的生命周期结构。

 下图是官网的Activity生命周期结构图,从这个图中可以看出Activity的生命周期函数挺多的,其实他的生命周期和以往我们看到的其他组件的生命周期一样,都是从创建到销毁的过程,只不过之间多加了几个生命周期函数,将他的生命周期细化了。

Activity生命周期结构图

首先看到的事onCreate()函数,顾名思义这个函数在Activity开始创建时调用,可以在其中定义一些初始化操作。接下来是 onStart()方法,这个方法在Activity开始被执行时调用,它紧随onCreate()方法之后调用,接着是onResume()方法,这个 方法对我们来说算是比较陌生的,这个方法是在该Activity或得用户输入焦点时被调用,这个或得用户输入焦点有点不好理解,如果我们用过 Android手机或者其他系统的手机时,经常会看到有些窗口虽然能看到但无法对他进行操作,这时的Activity就没有或得用户焦点。当这个方法调用 后Activity开始真正的运行了,在Activity正在运行时用户激活了另一个Activity,这时将调用***个Activity的 onPause()方法,可以理解为***个Activity被暂停了,这个时候如果系统的内存不够用,***个Activity的进程可能被停止(何时被停 止是由系统决定的,不需要我们参入),当下次我们再运行***个Activity时就需要重新创建这个Activity,那就又需要调用 onCreate()方法。如果在这个Activity没有被停止的情况下,我们重新调用***个Activity,就会直接调用它的onResume() 方法后开始运行。如果***个Activity很久都没有得到再次运行机会,就会调用onStop()被停止,这时如果Activity又或得用户输入焦 点,就会调用onRestart()方法,重新开始执行这个Activity,或者被系统停止,否则调用onDestroy()方法销毁 Activity。其实在实际开发中我们很少会用到所有的生命周期函数,但我们要弄清它的原理,在使用时知道所以然就行了。

下面来看一个实例

***个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>   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

第二个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>    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.

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);   
        }   
   
    }   
   
}   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.

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);   
        }   
           
    }   
}   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.

 

责任编辑:佚名 来源: iteye
相关推荐

2013-12-26 15:26:48

Android SDKActivity生命周期

2010-01-26 13:20:02

Android Act

2021-08-24 07:53:28

AndroidActivity生命周期

2015-07-08 16:28:23

weak生命周期

2017-07-04 09:49:36

ActivityAndroidLife场景

2022-04-19 07:20:24

软件开发安全生命周期SSDLC应用安全

2010-01-26 17:00:31

Android生命周期

2009-06-11 11:28:35

JSF生命周期

2010-07-14 10:48:37

Perl线程

2014-04-16 13:31:27

AndroidFragment多屏幕支持

2012-04-28 13:23:12

Java生命周期

2009-06-18 13:32:39

Java线程生命周期

2012-01-16 09:00:56

线程

2013-07-29 05:11:38

iOS开发iOS开发学习类的'生命周期'

2019-10-16 10:50:13

Linux内核测试

2009-06-17 15:06:50

Hibernate实体

2012-06-20 10:29:16

敏捷开发

2009-06-24 10:47:55

JSF生命周期

2013-08-19 17:03:00

.Net生命周期对象

2021-07-19 05:52:29

网络生命周期网络框架
点赞
收藏

51CTO技术栈公众号