先看图片:
activity的生命周期
大致分为 7个函数
分别是onCreate,onStart,onResume,onPause,onRestart,onStop,onDestroy
Activity有三个关键的循环:
- 整个的生命周期,从onCreate(Bundle)开始到onDestroy()结束。Activity在onCreate()设置所有的“全局”状态,在onDestory()释放所有的资源。例如:某个Activity有一个在后台运行的线程,用于从网络下载数据,则该Activity可以在onCreate()中创建线程,在onDestory()中停止线程。
- 可见的生命周期,从onStart()开始到onStop()结束。在这段时间,可以看到Activity在屏幕上,尽管有可能不在前台,不能和用户交互。在这两个接口之间,需要保持显示给用户的UI数据和资源等,例如:可以在onStart中注册一个IntentReceiver来监听数据变化导致UI的变动,当不再需要显示时候,可以在onStop()中注销它。onStart(),onStop()都可以被多次调用,因为Activity随时可以在可见和隐藏之间转换。
- 前台的生命周期,从onResume()开始到onPause()结束。在这段时间里,该Activity处于所有 Activity的最前面,和用户进行交互。Activity可以经常性地在resumed和paused状态之间切换,例如:当设备准备休眠时,当一个 Activity处理结果被分发时,当一个新的Intent被分发时。所以在这些接口方法中的代码应该属于非常轻量级的。
以下编写程序来演示这个生命周期的例子:
首先是两个Activity的程序:
-------------------------------------------------------------------------------------
package com.linutest.exa1;
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 MainActivity extends Activity {
private Button bt_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_btn = (Button) findViewById(R.id.bt_btns);
bt_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, TwoActivity.class);
intent.putExtra("updateData", "你要传的参数");
startActivity(intent);
}
});
System.out.println("onCreate");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("onDestroy");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
System.out.println("onPause");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
System.out.println("onRestart");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
System.out.println("onResume");
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
System.out.println("onStart");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
System.out.println("onStop");
}
}
----------------------------------------------------------------------
package com.linutest.exa1;
import android.app.Activity;
import android.os.Bundle;
public class TwoActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setTitle("我是第二个Act!");
}
}
-----------------------------------------------------------------------
然后是,android的布局配置和全局配置文件
activity_main.xml内容如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/bt_btns"
android:layout_width="130dp"
android:layout_height="40dp"
android:gravity="center"
android:background="#ff0000"
android:text="点击按钮"
/>
</LinearLayout >
-----------------------------------------------------------------------
AndroidManifest.xml内容如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.linutest.exa1"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
>
<activity
android:name=".MainActivity"
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=".TwoActivity" android:launchMode="standard"/>
</application>
</manifest>
------------------------------------------------------------------------------
运行环境是用AVD 4.0.3的设备运行:
运行效果如图:
第一个Act启动
点击按钮,第二个Act启动
按android设备上的回退按钮
将回退到Act1的图片状态,再次点击 回退 按钮,关闭Act。
然后,可以查看后台日志,logcat的输出为:
08-25 10:00:02.119: I/System.out(1403): onPause
08-25 10:00:02.378: I/System.out(1403): onStop
08-25 10:01:42.190: I/System.out(1403): onRestart
08-25 10:01:42.190: I/System.out(1403): onStart
08-25 10:01:42.190: I/System.out(1403): onResume
08-25 10:01:45.411: I/System.out(1403): onPause
08-25 10:01:45.960: I/System.out(1403): onStop
08-25 10:01:45.960: I/System.out(1403): onDestroy
可以知道各个生命周期函数的调用次序和过程。