`

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。这整个过程看起来有点绕,其实在实际开发中我们很少会用到所有的生命周期函数,但我们要弄清它的原理,在使用时知道所以然就行了。

 

下面来看一个实例(实例只列出一些重要的文件内容,具体的创建步骤可以参考之前的文章,实例源码参考mars老师的android视频教程):

第一个Activity的布局文件(main.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>

 第二个Activity的布局文件(Second.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="wrap_content"
    >
    <TextView 
    	android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
    	></TextView>
   	<Button 
   		android:id="@+id/secondButton"
   		android:layout_width="fill_parent"
   		android:layout_height="wrap_content"
   		android:text="@string/second_button"
   		/>
</LinearLayout>

 AndroidManifest.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:

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:

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);
		}
		
	}
}
 
分享到:
评论

相关推荐

    Activity生命周期与启动模式

    **Activity生命周期** Activity的生命周期包括了从创建到销毁的各个阶段,主要有以下7个关键状态: 1. **创建(Created)**:当Activity首次被创建时,会调用`onCreate()`方法。在这里,通常进行初始化工作,如...

    2020-实验1-Activity生命周期验证(已完成)1

    Activity生命周期的理解和管理对于编写高效、响应式的Android应用至关重要。本实验旨在深入探索Activity的生命周期,并通过实践来理解各个阶段的工作流程以及它们之间的转换。 首先,我们来看一下Activity的生命...

    activity生命周期

    这是Activity生命周期的第一个回调,通常在这里进行初始化工作,如设置布局、数据绑定等。 2. **启动(Started)**:`onStart()`方法标志着Activity可见但可能不完全在前台。用户可以看到Activity,但不能与其交互...

    Activity生命周期示例

    在Android应用开发中,Activity是用户界面的基本单元,它负责展示...在提供的`Activity_04`文件中,可能包含了演示这些生命周期方法变化的代码示例,通过学习和分析这些示例,开发者可以加深对Activity生命周期的理解。

    Activity生命周期

    当Activity不再需要时,系统会调用`onDestroy()`,这是Activity生命周期的最后阶段。通常在用户关闭Activity、系统回收资源或应用程序退出时发生。在这个方法里,可以进行清理工作,如关闭数据库连接、取消定时任务...

    测试Activity生命周期

    "测试Activity生命周期"的DEMO旨在帮助开发者直观地了解和调试Activity在不同场景下的状态变化。在这个DEMO中,我们可以通过观察日志输出或使用Android Studio的调试工具来跟踪Activity的状态。 Activity的生命周期...

    Activity生命周期总结

    ### Activity 生命周期总结 在 Android 开发中,理解 Activity 的生命周期是非常重要的,因为它直接影响到应用程序的行为、性能以及用户体验。本文将详细介绍 Activity 生命周期中的各个方法及其触发条件,并通过...

    Android activity生命周期示例

    本示例项目“Android activity生命周期示例”旨在帮助开发者深入理解Activity的生命周期及其各个阶段,这对于优化用户体验和资源管理至关重要。 Activity的生命周期包括以下几个主要状态: 1. **创建(Created)**...

    Activity生命周期分析

    这是Activity生命周期中的活跃状态。 - `onPause()`:当Activity即将被另一个Activity覆盖,但仍然部分可见时,系统调用`onPause()`。在此方法中,你应该保存临时数据,但不应执行耗时操作,因为它会影响新Activity...

    Activity生命周期demo

    谷歌官方提供的Activity生命周期示例("Activity lifecycle demo")是一个实用的教学工具,帮助开发者直观地理解Activity在不同情况下的状态变化。 这个demo最初是基于Eclipse开发的,但已经转化为更适合现代开发...

    activity生命周期函数

    7. onDestroy():Activity即将被销毁时调用,这是Activity生命周期的最后阶段。在此阶段,可以做彻底的清理工作,例如关闭数据库连接、取消定时任务等。 二、Activity与Fragment的生命周期 Fragment是Android 3.0...

    android activity 生命周期详细介绍

    ### 一、Android Activity生命周期介绍 #### 1. onCreate() 当Activity首次创建时被调用,这是初始化Activity的最佳时机。在该方法中通常会执行一些初始化操作,比如设置布局文件、初始化UI组件等。 示例: ``` @...

    android Activity生命周期详解(图文)

    总之,深入理解Activity生命周期和其背后的源码逻辑,对于编写高效、响应迅速且用户体验优秀的Android应用至关重要。开发者应熟练掌握这些知识点,以便在设计和调试应用时能得心应手。通过实践和分析ActivityDemo,...

    Activity生命周期图

    很好的一张Activity生命周期图,可以很清楚了解Activity生命周期的流程图

    Activity生命周期Demo

    在这个"Activity生命周期Demo"中,我们将深入探讨Activity如何启动、运行、暂停、停止以及销毁的过程,以及在这些状态转换中如何适当地处理程序逻辑。 1. **Activity生命周期的基本阶段** - **创建(Created)**: ...

    深入理解Activity生命周期

    这是Activity生命周期的第一个回调,通常在这里进行初始化工作,如设置布局、绑定数据等。 2. **可见(Visible)**:Activity从不可见变为可见,但可能还在启动过程中,此时调用`onStart()`。在这个阶段,Activity...

    测试Android Activity生命周期Demo

    本示例“测试Android Activity生命周期Demo”旨在通过实际代码帮助开发者理解并掌握Activity的生命周期,这对于创建稳定、高效的Android应用至关重要。 Activity的生命周期包括了多个关键状态,如初始化、启动、...

    设备旋转与Activity生命周期

    标题“设备旋转与Activity生命周期”所指的知识点主要是Android中Activity如何响应设备的屏幕方向变化。Activity是Android应用程序的基本组件,它负责与用户进行交互。在设备旋转时,系统会触发Activity的生命周期...

    Activity生命周期演示

    日志追踪(完成以下六步、明白android的四种状态的生命周期和相互切换): 1、启动app、查看控制台输出,发现依次触发onCreate、onStart、onResume这三个方法 2、点击按钮(弹窗风格的Activity),控制台输出onPause...

    Android学习3——Activity生命周期

    在“Android学习3——Activity生命周期”这个主题中,我们将深入探讨Activity如何启动、运行、暂停、停止以及销毁,并了解每个状态之间的转换。 Activity生命周期主要包括以下几个关键状态: 1. **初始状态...

Global site tag (gtag.js) - Google Analytics