Activity的生命周期包含7个方法,
分别是:onCreate()——创建,onStart()——启动,onResume()——开始,onPause()——暂停,onRestart()——重新启动,onDestory()——销毁,onStop()——停止。
onCreate:创建Activity调用,用于Activity的初始化。
onStart():Activity在屏幕上对用户可见时调用。
onResume():Activity获得焦点时调用。
onPause():Activity被暂停时调用,即当有当前activity进入另一个Activity时(准备创建另一个Activity时)。
onRestart():从另一个activity回到当前Activity时。
onStop():Activity被停止或者Activity变成不可见时。
onDestory():调用了finish()或者android回收内存时。
这里结合一个例子说明。
创建2个Activity,分别为FirstActivity,SecondActivity。
代码如下:
FirstActivity.java:
package com.and.test;
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 btn = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
System.out.println("FirstActivity-------onCreate()");
super.onCreate(savedInstanceState);
this.setContentView(R.layout.first);
btn = (Button) super.findViewById(R.id.btn);
btn.setText(R.string.gotosecond);
btn.setOnClickListener(new ButtonClickLister());
}
class ButtonClickLister implements OnClickListener {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(FirstActivity.this, SecondActivity.class);
FirstActivity.this.startActivity(intent);
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
System.out.println("FirstActivity-------onDestory()");
super.onDestroy();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
System.out.println("FirstActivity-------onPause()");
super.onPause();
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
System.out.println("FirstActivity-------onRestart()");
super.onRestart();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
System.out.println("FirstActivity-------onResume()");
super.onResume();
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
System.out.println("FirstActivity-------onStart()");
super.onStart();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
System.out.println("FirstActivity-------onStop()");
super.onStop();
}
}
SecondActivity.java:
package com.and.test;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
/**
* 每一个Activity都需要在AndroidManafest.xml中声明
* @author babylove
*
*/
public class SecondActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// 指定布局
this.setContentView(R.layout.second);
// 获取布局文件中的TextView组件
TextView textview = (TextView) this.findViewById(R.id.myTextView);
// 设置textview的值。R.string.second_activity_textview:res/values/strings.xml文件中定义的name为second_activity_textview的String
textview.setText(R.string.second_activity_textview);
// 获取传递过来的Intent
Intent intent = getIntent();
// 获取传递的数据
String test = intent.getStringExtra("test");
textview.setText(test);
textview.setText("信息已发送!");
System.out.println("SecondActivity-------onCreate()");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("SecondActivity-------onDestroy()");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
System.out.println("SecondActivity-------onPause()");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
System.out.println("SecondActivity-------onRestart()");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
System.out.println("SecondActivity-------onResume()");
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
System.out.println("SecondActivity-------onStart()");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
System.out.println("SecondActivity-------onStop()");
}
}
这2个Activity都重写了Activity生命周期设计的7个方法。
在FirstActivity中,有一个按钮,单击该按钮可以进入SecondActivity。
FirstActivity的布局文件first.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
String.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, HelloandroidActivity!</string>
<string name="app_name">Hello Android</string>
<string name="second_activity_textview">The Second Activity</string>
<string name="gotosecond">跳转到第二个activity</string>
</resources>
在AndroidManifest.xml中注册这2个Activity。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.and.test"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="9" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".FirstActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SecondActivity"></activity>
</application>
</manifest>
接下来,为了看到调用Activity的7个生命周期方法时的输出,在LogCat中增加一个过滤器。
OK,运行我们的Android程序。
首先显示的是FirstActivity,在LogCat中看到如下输出:
03-3011:46:08.996:INFO/System.out(861):FirstActivity-------onCreate()
03-3011:46:09.096:INFO/System.out(861):FirstActivity-------onStart()
03-3011:46:09.096:INFO/System.out(861):FirstActivity-------onResume()
首次运行分别调用了onCreate(),onStart()和onResume(),这3个方法调用完毕后我们就可以看到FirstActivity这个Activity了。
单击“跳转到第二个activity”跳转到SecondActivity。
LogCat中依次输出:
03-3011:59:09.096:INFO/System.out(861):FirstActivity-------onPause()
03-3011:59:09.175:INFO/System.out(861):SecondActivity-------onCreate()
03-3011:59:09.175:INFO/System.out(861):SecondActivity-------onStart()
03-3011:59:09.196:INFO/System.out(861):SecondActivity-------onResume()
03-3011:59:09.757:INFO/System.out(861):FirstActivity-------onStop()
可以看到,首先是FirstActivity暂停,然后依次是SecondActivity的onCreate(),onStart(),onResume()。对于SecondActivity来说是首次创建,因此也是调用了这3个方法。然后SecondActivity被呈现,然后FirstActivity停止。
单击Back按钮,回到FirstActivity。
LogCat中输出如下:
03-3012:07:03.015:INFO/System.out(861):SecondActivity-------onPause()
03-3012:07:03.055:INFO/System.out(861):FirstActivity-------onRestart()
03-3012:07:03.055:INFO/System.out(861):FirstActivity-------onStart()
03-3012:07:03.055:INFO/System.out(861):FirstActivity-------onResume()
03-3012:07:03.617:INFO/System.out(861):SecondActivity-------onStop()
03-3012:07:03.617:INFO/System.out(861):SecondActivity-------onDestroy()
现在是在FirstActivity,继续单击返回按钮,回到应用程序列表。
Logcat输出如下:
03-3012:35:57.797:INFO/System.out(861):FirstActivity-------onPause()
03-3012:35:59.146:INFO/System.out(861):FirstActivity-------onStop()
03-3012:35:59.146:INFO/System.out(861):FirstActivity-------onDestory()
其实用一个例子就可以很好的理解Activity的生命周期了,附上AndroidAPI提供的Activity生命周期状态图:
结合上面的例子跟这个图,理解起来就应该就差不多了。