Activity生命周期测试结果分析

Android提供了很多Activity的生命周期函数,比如我们前面用到的onCreate(),系统还提供的常用的函数有onStart()onResume()onPause()onStop()onDestroy()等。

提到Activity生命周期,咱们先看看Android API 提供的生命周期图


我们从上图可以看到,最一开始进入的是onCreate方法,然后分别有onStart、onResume、onPause、onStop、onRestart 这些方法最后是onDetrory方法结束。

onCreate():创建Activity调用,用于Activity的初始化,在Activity生命周期中只执行一次,适用于实例化对象

onStart()Activity:在屏幕上对用户可见时调用

onResume()Activity开始和用户交互的时候调用,这时该Activity是在Activity栈的顶部

onPause()Activity被暂停时调用,被其他的Activity挡在后面,这里可以做一些清理和保存工作

onStop()Activity被停止或者Activity变成不可见时调用

onDestroy () Activity 被从内存中移除,一般发生在执行

从字面意思我们大概可以知道每个方法在什么时候执行,为了更好的理解每个方法的执行顺序,我们用一个简单的例子来测试一下。

第一步:
首先我们新建一个Android项目,命名为lifeCycle, 打开MainActivity.
第二步:
修改MainActivity,代码如下:
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toast toast = Toast.makeText(MainActivity.this,
				"======== onCreate ========", Toast.LENGTH_SHORT);
		toast.show();
        System.out.println("======== onCreate ========");
    }
    @Override
	protected void onStart() {
		super.onStart();
		Toast toast = Toast.makeText(MainActivity.this,
				"======== onStart ========", Toast.LENGTH_SHORT);
		toast.show();
		System.out.println("======== onStart ========");
	}

	@Override
	protected void onRestart() {
		super.onRestart();
		Toast toast = Toast.makeText(MainActivity.this,
				"======== onRestart ========", Toast.LENGTH_SHORT);
		toast.show();
		System.out.println("======== onRestart ========");
	}

	@Override
	protected void onResume() {
		super.onResume();
		Toast toast = Toast.makeText(MainActivity.this,
				"======== onResume ========", Toast.LENGTH_SHORT);
		toast.show();
		System.out.println("======== onResume ========");
	}

	@Override
	protected void onPause() {
		super.onPause();
		Toast toast = Toast.makeText(MainActivity.this,
				"======== onPause ========", Toast.LENGTH_SHORT);
		toast.show();
		System.out.println("======== onPause ========");
	}

	@Override
	protected void onStop() {
		super.onStop();
		Toast toast = Toast.makeText(MainActivity.this,
				"======== onStop ========", Toast.LENGTH_SHORT);
		toast.show();
		System.out.println("======== onStop ========");
	}

	@Override
	protected void onDestroy() {
		super.onStop();
		Toast toast = Toast.makeText(MainActivity.this,
				"======== onDestroy ========", Toast.LENGTH_SHORT);
		toast.show();
		System.out.println("======== onDestroy ========");
	}


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}

接着运行程序,可以看到Log打印的信息为:

接着按下返回键,打印的Log信息为:


接着进入程序,打印的Log信息为:


接着按下Home键,打印的Log信息为:


再次进入程序,打印的Log信息为:



第三步:

新建一个SecondActivity类,代码如下:

package com.example.lifecycle;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.Toast;

public class SecondActivity extends Activity {

	 @Override
	    protected void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.activity_main);
	        Toast toast = Toast.makeText(SecondActivity.this,
					"======== onCreate ========", Toast.LENGTH_SHORT);
			toast.show();
	        System.out.println("======== onCreate ========");
	    }
	    @Override
		protected void onStart() {
			super.onStart();
			Toast toast = Toast.makeText(SecondActivity.this,
					"======== onStart ========", Toast.LENGTH_SHORT);
			toast.show();
			System.out.println("======== onStart ========");
		}

		@Override
		protected void onRestart() {
			super.onRestart();
			Toast toast = Toast.makeText(SecondActivity.this,
					"======== onRestart ========", Toast.LENGTH_SHORT);
			toast.show();
			System.out.println("======== onRestart ========");
		}

		@Override
		protected void onResume() {
			super.onResume();
			Toast toast = Toast.makeText(SecondActivity.this,
					"======== onResume ========", Toast.LENGTH_SHORT);
			toast.show();
			System.out.println("======== onResume ========");
		}

		@Override
		protected void onPause() {
			super.onPause();
			Toast toast = Toast.makeText(SecondActivity.this,
					"======== onPause ========", Toast.LENGTH_SHORT);
			toast.show();
			System.out.println("======== onPause ========");
		}

		@Override
		protected void onStop() {
			super.onStop();
			Toast toast = Toast.makeText(SecondActivity.this,
					"======== onStop ========", Toast.LENGTH_SHORT);
			toast.show();
			System.out.println("======== onStop ========");
		}

		@Override
		protected void onDestroy() {
			super.onStop();
			Toast toast = Toast.makeText(SecondActivity.this,
					"======== onDestroy ========", Toast.LENGTH_SHORT);
			toast.show();
			System.out.println("======== onDestroy ========");
		}


	    @Override
	    public boolean onCreateOptionsMenu(Menu menu) {
	        // Inflate the menu; this adds items to the action bar if it is present.
	        getMenuInflater().inflate(R.menu.main, menu);
	        return true;
	    }
	    

}

第四步:

修改activity_main.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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点击" />
    

</RelativeLayout>

第五步:

修改MainActivity.java代码,代码如下:

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toast toast = Toast.makeText(MainActivity.this,
				"======== onCreate ========", Toast.LENGTH_SHORT);
		toast.show();
        System.out.println("======== onCreate ========");
        Button button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Intent intent = new Intent();
				intent.setClass(MainActivity.this, SecondActivity.class);
				startActivity(intent);
			}
		});
    }

第六步:

重新运行程序,点击Button按钮,页面跳转,打印的Log信息为:




接着按下返回键,打印的Log信息为:



当程序刚进入的时候都会依次执行onCreate、onStart 、onResume;
如果当前Activity没有执行onDestroy方法的话,当他再次进入的时候则会执行onRestart 、onStart 、onResume.



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值