Activity生命周期

来源:互联网 发布:linux运维常用脚本 编辑:程序博客网 时间:2024/05/02 17:17

首先创建两个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;@Overrideprotected 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);}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.i("INFO","A onDestroy()");}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();Log.i("INFO","A onPause()");}@Overrideprotected void onRestart() {// TODO Auto-generated method stubsuper.onRestart();Log.i("INFO","A onRestart()");}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();Log.i("INFO","A onResume()");}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();Log.i("INFO","A onStart()");}@Overrideprotected void onStop() {super.onStop();Log.i("INFO","A onStop()");}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent 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;@Overrideprotected 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);}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.i("INFO","B onDestroy()");}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();Log.i("INFO","B onPause()");}@Overrideprotected void onRestart() {// TODO Auto-generated method stubsuper.onRestart();Log.i("INFO","B onRestart()");}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();Log.i("INFO","B onResume()");}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();Log.i("INFO","B onStart()");}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();Log.i("INFO","B onStop()");}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent 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()方法也是对应的,前者显示界面,后者不显示






0 0
原创粉丝点击