Android学习笔记(4)——Activity生命周期
Android应用程序由很多的Activity组成,本例将简单说明Activity的生命周期过程:
new一个Android应用程序,其中先new两个Activity用来演示(FirstActivity、SecondActivity):
FirstActivity:
布局first.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" tools:context=".FirstActivity" > <Button android:id="@+id/myButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_first" /> </RelativeLayout>
对应的FirstActivity.java:
package com.example.activity_04; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class FirstActivity extends Activity { private Button myBtn; class BtnClickListener implements OnClickListener{ @Override public void onClick(View arg0) { Intent intent=new Intent(); intent.setClass(FirstActivity.this, SecondActivity.class); FirstActivity.this.startActivity(intent); } } @Override protected void onCreate(Bundle savedInstanceState) { System.out.println("FirstActivity ---> onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.first); myBtn=(Button)findViewById(R.id.myButton); myBtn.setOnClickListener(new BtnClickListener()); } @Override protected void onStart() { System.out.println("FirstActivity ---> onStart"); super.onStart(); } @Override protected void onRestart() { System.out.println("FirstActivity ---> onRestart"); super.onRestart(); } @Override protected void onResume() { System.out.println("FirstActivity ---> onResume"); super.onResume(); } @Override protected void onPause() { System.out.println("FirstActivity ---> onPause"); super.onPause(); } @Override protected void onStop() { System.out.println("FirstActivity ---> onStop"); super.onStop(); } @Override protected void onDestroy() { System.out.println("FirstActivity ---> onDestroy"); super.onDestroy(); } }
重写了Activity生命周期内的七个重要事件:onCreate、onStart、onResume、onPause、onStop、onRestart、onDestory,
在他们被执行时,分别输出"Activity名 ---> 事件名",
同样的方式new一个SecondActivity:
布局second.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" tools:context=".SecondActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_second" /> </RelativeLayout>
对应的SecondActivity.java:
package com.example.activity_04; import android.app.Activity; import android.os.Bundle; public class SecondActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { System.out.println("SecondActivity ---> onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.second); } @Override protected void onStart() { System.out.println("SecondActivity ---> onStart"); super.onStart(); } @Override protected void onRestart() { System.out.println("SecondActivity ---> onRestart"); super.onRestart(); } @Override protected void onResume() { System.out.println("SecondActivity ---> onResume"); super.onResume(); } @Override protected void onPause() { System.out.println("SecondActivity ---> onPause"); super.onPause(); } @Override protected void onStop() { System.out.println("SecondActivity ---> onStop"); super.onStop(); } @Override protected void onDestroy() { System.out.println("SecondActivity ---> onDestroy"); super.onDestroy(); } }
需要观察System.out输出的信息,需要添加输出log的过滤器:
1.打开DMMS页:
2.添加一个过滤器:
3.输入过滤器想要过滤出的内容:
过滤器过滤出的信息将会被显示在LogCat窗口中
启动Android模拟器,运行一下程序,分别执行以下步骤,观察System.out的输出:
1.启动程序,首先打开的是FirstActivity(之前已在AndroidManifest.xml中配置):
观察输出如下:
2.点击FirstActivity中的Button,切换到SecondActivity:
观察输出如下:
3.点击Android模拟器的返回按钮,跳转回FirstActivity:
观察输出如下:
4.再次点击FirstActivity中的Button,切换到SecondActivity:
观察输出如下:
总结如下:
一个Activity的创建顺序执行:onCreate,onStart,onResume
从FirstActivity启动SecondActivity时,顺序调用:FirstActivity的onPause,然后SecondActivity的onCreate,onStart,onResume,最后是FirstActivity的onStop
七大事件:
onCreate:
当这个Activity第一次被创建的时候调用,在里面去设置布局文件、或者对按钮绑定监听器等一些静态的操作;
onStart:
当这个Activity能被看到的时候调用;
onResume:
当这个Activity能获得用户焦点,用户能操作这个Activity的时候调用;
onPause:
当要启动另一个Activity时调用,例如当你的程序在运行时,有一个来电,系统调用电话,你的程序被遮挡住时调用,一般在里面写一些保存当前Activity操作数据的代码,以便恢复操作时还原数据;
onStop:
当这个Activity对用户而言不可见的时候调用,如果上一个Activity调用出来的是一个小的对话块,没能完全遮挡住这个Activity,则不会调用上一个Activity的onStop;
onRestart:
当一个Activity对用户不可见了以后,但是没有被销毁,再次要显示的时候,就最先调用onRestart,而不需要再调用onCreate;
onDestory:
销毁Activity,如果你在代码里明确调用了finish方法,则会调用销毁,或者当系统资源不够用的时候,也会自动销毁不可见的Activity,如果再启用已经被销毁的Activity时,需要再调用onCreate;