Android学习笔记04——Activity的生命周期
2012-02-11 23:47
417 查看
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
点击第一个Activity按钮时进入第二个Activity,再按返回键返回到第一个Activity时执行的相关操作:
由图可以看出,每启动一个新的Activity都会调用3个方法(注:是OS调用的,不是手动写的):
OnCreat(); //生成新的Activity时
OnStart(); //能被用户看到时
OnResume(); //能获得焦点的时候,也就是能点击按钮,文本框时。
OnDestroy被调用的时机:
1、Activity主动销毁时
2、明确写出了Activity的finish方法时。
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执行某些生命函数时,可以被杀掉。
贝海拾遗:
1.设置过滤器的方法:
切换到DDMS视图(右上角),在logcat里点击“+”,在By log tag里设置需要过滤出的信息。
2.eclipse将项目从jdk 1.5版本升为jdk1.6版本的方法:
Project->Properties->Java Compiler->Configure Workspace Setting,在弹出的页面中进行设置,将JDK由1.5改为1.6,重新编译后即可运行了。
3.对话框的配置:
代码很简单,与其他控件设置一样,只不过在AndroidMainfest.xml里插入以下代码即可
下面是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被调用的时机:
1、Activity主动销毁时
2、明确写出了Activity的finish方法时。
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,在弹出的页面中进行设置,将JDK由1.5改为1.6,重新编译后即可运行了。
3.对话框的配置:
代码很简单,与其他控件设置一样,只不过在AndroidMainfest.xml里插入以下代码即可
<activity android:name="***" android:label="***" android:theme="@android:style/theme.Dialog"/>
相关文章推荐
- Android学习笔记:<二>04.Activity的生命周期
- Android学习笔记04-Activity及Activity生命周期
- Android学习笔记04:Activity及Activity生命周期
- Android学习笔记04:Activity及Activity生命周期
- Android学习笔记(4):Activity生命周期
- Android学习笔记5——Activity的生命周期
- Android学习笔记3 Activity的生命周期
- android学习笔记(5)Activity生命周期学习
- Android学习笔记----Activity的生命周期
- Android学习笔记 - Activity生命周期篇
- android学习笔记13--------------Activity生命周期
- Android学习笔记-Activity的生命周期
- Android学习笔记:Activity生命周期详解
- Android学习笔记(三三):Activity生命周期
- Activity的生命周期(android学习笔记)
- Android学习笔记(1)--关于activity的生命周期和启动模式
- Android学习笔记(3)-Activity的生命周期
- android学习笔记——Activity的生命周期
- Android学习笔记4 Activity的生命周期
- Android学习笔记之一 Activity的生命周期