Android学习笔记04——Activity的生命周期

Android学习笔记04——Activity的生命周期


 
        下面是google官方给出的android生命周期图:

Activity的7种生命周期:

          OnCreate():当Activity第一次创建的时候

OnStart()activity变为在屏幕上对用户可见时调用。当Activity能被用户看到时调用OnStarte()方法(Called when the activity is becoming visible to the user. )

OResume()activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的)

OnPause()Activity被其他Activity遮挡时调用此方法,即activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的,也是保护现场,压栈。

OnStop()activity被停止并转为不可见阶段及后续的生命周期事件时调用。

OnRestart():重新启动activity时调用。该活动仍在栈中,而不是启动新的活动

OnDestroy()activity被完全从系统内存中移除时调用

  

注:这些方法都是OS自行调用的。



演示效果:


相关代码:
FirstActivity.java
package mars.activity04;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
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;
//下面覆写了这7个生命周期的相关方法,并用System.out输出动态显示。
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	System.out.println("FirstAcvity ---> onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myButton = (Button)findViewById(R.id.myButton);
        myButton.setText("启动第二个Activity");
        myButton.setOnClickListener(new ButtonOnClickListener());
    }

	@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 ButtonOnClickListener implements OnClickListener{

		@Override
		public void onClick(View v) {
			Intent intent = new Intent();
			intent.setClass(FirstActivity.this,SecondActivity.class);
			FirstActivity.this.startActivity(intent);  //启动第二个Activity
		}
		
	}
	
}
secondActivity.java
package mars.activity04;

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

public class SecondActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		System.out.println("SecondActivity--->onCreate");
		super.onCreate(savedInstanceState);
		
	}

	@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();
	}

}

点击第一个Activity按钮时进入第二个Activity,再按返回键返回到第一个Activity时执行的相关操作:


 由图可以看出,每启动一个新的Activity都会调用3个方法(注:是OS调用的,不是手动写的):
OnCreat(); //生成新的Activity时
OnStart(); //能被用户看到时
OnResume(); //能获得焦点的时候,也就是能点击按钮,文本框时。

OnDestroy被调用的时机:

1Activity主动销毁时

2、明确写出了Activityfinish方法时。

3、当android系统资源不够用时,会将优先级较低的Activity销毁掉。

 Activity与Task
     Android系统中Activity作为Activity栈(Stack)被管理的,大家都知道栈的特点是先进后出,所以当前活动的Activity处于栈顶,之前非活动的Activity被压入栈底,等待是否可能被恢复为活动状态。

Task就是一个栈,用于盛放各种Activity。

   应用程序启动第一个Activity后,该Activity会被压入到栈(Task)中,点击第二个Activity后,该Activity会被压入到栈中记住一点,程序只会显示在栈顶的Activity用户体验相当重要。
注意SecondActivity.this.finish();这句代码,会将SecondActivity从栈中踢出去,从而你在显示ThirdActivity,点击返回按钮时,会直接跳到FirstActivity去了。

当有对话框时,主Activity不会执行OnStop方法。

Activity能否被Kill掉?

在手机资源有限的情况下,操作系统会自动关闭某些Acitviy,说明这些Activity可以被killed掉。当一些Activity执行某些生命函数时,可以被杀掉。

Method

Killable?

Next

onCreate()

No

onStart()

    

onRestart()

No

onStart()

onStart()

No

onResume() oronStop()

    

onResume()

No

onPause()

onPause()

Pre-HONEYCOMB

onResume()or
onStop()

onStop()

Yes

onRestart()or
onDestroy()

onDestroy()

Yes

nothing




贝海拾遗:

1.设置过滤器的方法:

切换到DDMS视图(右上角),在logcat里点击“+”,在By log tag里设置需要过滤出的信息。

2.eclipse将项目从jdk 1.5版本升为jdk1.6版本的方法:

Project->Properties->Java Compiler->Configure Workspace Setting,在弹出的页面中进行设置,将JDK1.5改为1.6,重新编译后即可运行了。

3.对话框的配置:

代码很简单,与其他控件设置一样,只不过在AndroidMainfest.xml里插入以下代码即可

<activity android:name="***"
          android:label="***"
          android:theme="@android:style/theme.Dialog"/>






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值