Activity生命周期

首先创建两个Activity 

ActivityA如下:

package com.z.ok;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ActivityA extends Activity implements OnClickListener {
	private Button one;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.one);
		Log.i("INFO","A onCreate()");
		one = (Button)findViewById(R.id.one);
		one.setOnClickListener(this);
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		Log.i("INFO","A onDestroy()");
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		Log.i("INFO","A onPause()");
	}

	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		super.onRestart();
		Log.i("INFO","A onRestart()");
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Log.i("INFO","A onResume()");
	}

	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		Log.i("INFO","A onStart()");
	}

	@Override
	protected void onStop() {
		
		super.onStop();
		Log.i("INFO","A onStop()");
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		Intent intent = new Intent(ActivityA.this,ActivityB.class);
		startActivity(intent);
//		finish();
	}
}
ActivityB如下:

package com.z.ok;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ActivityB extends Activity implements OnClickListener {
	private Button two;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.two);
		Log.i("INFO","B onCreate()");
		two = (Button)findViewById(R.id.two);
		two.setOnClickListener(this);
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		Log.i("INFO","B onDestroy()");
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		Log.i("INFO","B onPause()");
	}

	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		super.onRestart();
		Log.i("INFO","B onRestart()");
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Log.i("INFO","B onResume()");
	}

	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		Log.i("INFO","B onStart()");
	}

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		Log.i("INFO","B onStop()");
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		Intent intent = new Intent(ActivityB.this,ActivityA.class);
		startActivity(intent);
//		finish();
	}
}
启动APP

ActivityA启动,打印信息如下:

A onCreate();//创建,初始化组件
A onStart();//让ActivityA显示
A onResume();//让ActivityA可操作
1.ActivityA启动ActivityB未调用finishi()方法

打印信息如下:

A onPause();//ActivityA不可操作
B onCreate();//创建,初始化组件
B onStart();//让ActivityB显示
B onResume();//让ActivityB可操作
A onStop();//让ActivityA不显示
此时ActivityB按Back返回到ActivityA,打印信息如下:

B onPause();
A onRestart();
A onStart();
A onResume();
B onStop();
B onDestroy();
注意:按下Back返回键,当前Activity会被销毁,因而调用onDestroy()方法

2.ActivityA启动ActivityB且ActivityA调用了finish()

打印信息如下:

A onPause();//不可操作
B onCreate();//创建,初始化组件
B onStart();//让ActivityB显示
B onResume();//让ActivityB可操作
A onStop();//让ActivityA不显示
A onDestroy();//ActivityA销毁
3.ActivityA启动后直接按HOME键回到界面,打印消息如下:

A onCreate();//创建,初始化组件
A onStart();//让ActivityA显示
A onResume();//让ActivityA可操作
A onPause();//不可操作
A onStop();//不显示界面
从桌面回到ActivityA界面,打印消息如下:

A onRestart();
A onStart();
A onResume();
4.如果ActivityB是个Dialog(显示出来并未将ActivityA完全覆盖)
ActivityA启动ActivityB未调用finish()方法,打印信息如下:

A onPause();
B onCreate();
B onStart();
B onResume();
//此处不会调用A onStop();因为B是个Dialog并未将ActivityA完全覆盖

点击空白处:
B onPause();
A onResume();
B onStop();
B onDestroy();

5.ActivityA启动ActivityB且调用了finish();

A onPause();
B onCreate();
B onStart();
B onResume();
A onStop();//界面消失
A onDestroy();//销毁
点击空白处

B onPause();
B onStop();//因为A已经销毁了
B onDestroy();
最后:

如果ActivityA启动ActivityB(未调用finish()方法)

且ActivityB启动ActivityC(未调用finish()方法)

销毁日志:

<pre name="code" class="java">A onDestroy();

 

如果ActivityA启动ActivityB(调用finish()方法)

且ActivityB启动ActivityC(未调用finish()方法)

销毁日志:
B onDestroy(); //由于ActivityA已经调用finish()方法销毁了

小结:onDestroy()方法只有在调用finish()方法或者Back返回键时调用,如果强杀进程,只会调用最开始的Activity的onDestroy()

(即ActivityA启动ActivityB启动ActivityC,然后直接杀进程,只会调用A onDestroy())

onRestart()方法的调用时由于该Activity并未调用onDestroy()方法销毁,可以理解为重新唤起

onPause()方法和onResume()方法是对应的,前者不可操作,后者可操作

onStart()方法和onStop()方法也是对应的,前者显示界面,后者不显示






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值