欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android07_Activity生命周期(一)

程序员文章站 2024-02-11 19:35:52
...

一、Activity的生命周期结构


Android07_Activity生命周期(一)
 二、Activity
生命周期函数

Activity共有七个生命周期函数:

 

 public class Activity extends ApplicationContext {
     protected void onCreate(Bundle savedInstanceState);

     protected void onStart();
     
     protected void onRestart();

     protected void onResume();

     protected void onPause();

     protected void onStop();

     protected void onDestroy();
 }

  1.onCreate()方法:当一个activity第一次被创建的时候就会被调用。在onCreate()方法里面通常会设置activity所使用的布局文件,还有按钮等控件绑定监听器等。

 

2.onStart()方法:当一个activity能够被看见的时候就会被调用。

 

3.onResume()方法:当activity能够获得用户的焦点的时候就会被调用。

 

4.onPause()方法:应用程序启动另外一个activity的时候,就会调用第一个activity的onPause()方法。此时由于已经启动了第二个activity(第一次),所以,又会依次调用第二个activity的OnCreate()、onStart()和onResume()方法。最后会执行第一个activity的onStop()方法。

onPause()方法中,一般进行的是数据的保存。

 

5.onStop()方法:当一个activity对于一个用户来说是不可见(被遮挡)的情况下就会调用。但是如果第二个activity是以对话框的形式出来的,那么这个对话框没有把上一个activity遮挡起来,所以此时不会调用onStop方法。

 

6.onRestart()方法:当一个activity被onStop了,此时重新启动,则会调用。并且现在不会调用onCreate()方法,因为并不是创建,原activity没有被销毁。

 

7.onDestory()方法:启动该方法有两种情况

1)在activity中明确调用了finish()方法,就会销毁。

2)当android的系统资源不够用了,且activity是不可见的(已经onStop了)。

 

三、例子程序

这个例子很简单,两个activity,第一个中有一个按钮,点击之后会跳转到第二个activity中。且两个activity都重写了生命周期的7个方法。界面如下:


    Android07_Activity生命周期(一)


    Android07_Activity生命周期(一)
 
  Activity04.java

 

package com.android.activity;

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

	private Button myButton = null;
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
		System.out.println("firstActivity---->onCreate");
        
        myButton = (Button)findViewById(R.id.myButton);
        myButton.setText(R.string.myButton);
        myButton.setOnClickListener(new MyButtonListener());
    }
	
	@Override
	protected void onDestroy() {
		System.out.println("firstActivity---->onDestroy");
		super.onDestroy();
	}

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

	@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 onStart() {
		System.out.println("firstActivity---->onStart");
		super.onStart();
	}

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

	class MyButtonListener implements OnClickListener{

		public void onClick(View v) {
			Intent intent = new Intent();
			intent.setClass(Activity04.this, OtherActivity.class);
			Activity04.this.startActivity(intent);
		}
		
	}
}

  OtherActivity.java

 

package com.android.activity;

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

public class OtherActivity extends Activity{

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

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

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

	@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 onStart() {
		System.out.println("secondActivity---->onStart");
		super.onStart();
	}

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

}

  由于输出信息较多,为了便于观察,可以打开Android的logCat视图


Android07_Activity生命周期(一)

在该视图中添加一个System.out的过滤器


Android07_Activity生命周期(一)

点击ok后如下图所示:


Android07_Activity生命周期(一)
 System.out标签中只会显示输出信息。

 

运行项目,出现第一个activity时,显示信息为:


Android07_Activity生命周期(一)
 此时由于第一个activity第一次启动,所以会依次调用onCreate、onStart和onResume方法。

 

当点击按钮后,显示信息为:


Android07_Activity生命周期(一)
 此时,第一个activity被覆盖,第二个activity启动,所以会调用第一个activity的onPause方法,同时依次调用第二个activity的onCreate、onStart、onResume方法,并且由于第一个activity不可见了所以会将其停止。

 

当按返回键时,显示信息为:


Android07_Activity生命周期(一)
 此时第二个activity被覆盖,会调用其onPause方法,又由于第一个activity并没有被销毁(destroy),所以并不需要重新创建第一个activity,只restart即可。