当Activity处于Android应用中运行时,它的活动状态由Android以Activity栈的形式管理。当前活动的Activity位于栈顶。随着不同应用的运行,每个Activity都有可能从活动状态转入飞活动状态,也可从非活动状态准入活动状态。
归纳起来Activity大致会经过如下4个状态。
- 活动状态:当前Activity位于前台,用户可见,可以获得焦点。
- 暂停状态:其他Activity位于前台,该Activity依可见,只是不能获得焦点。
- 停止状态:该Activity不可见,失去焦点。
- 销毁状态:该Activity结束,或Activity所在的Dalvik进程被结束。
图4.15(该图示Android官方文档图片)显示了Activity生命周期及相关回调方法。
图4.15 Activity生命周期及回调方法
从图4.15可以看出,在Activity的生命周期中,如下方法会被系统回调。
- onCreate(Bundle savedStatus):创建Activity时被回调。该方法只会被调用一次。
- onStart():启动Activity时被回调。
- onRestart():重新启动Activity时被回调。
- onResume():恢复Activity时被回调,onStart()方法后一定会回调onResume()方法。
- onPause():暂停Activity时被回调。
- onStop():停止Activity时被回调。
- onDestroy():销毁Activity时被回调。该方法只会被调用一次。
下面的Activity覆盖了上面的7个生命周期的方法,并在每个方法中增加了一行记录日志代码。该Activity的界面布局很简单,一个用于启动一个对话框风格的Activity,另一个用于退出该应用。
布局文件如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <Button android:id="@+id/startActivity" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="启动对话框风格的Activity" /> <Button android:id="@+id/finisth" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="退出" /> </LinearLayout>
后台Java代码文件如下:
package com.example.studyactivity; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class Lifecycle extends Activity { final String TAG="--CrazyIt--"; Button finish,startActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_lifecycle); //输出日志 Log.d(TAG,"------------onCreate-----------------"); finish=(Button)findViewById(R.id.finisth); startActivity=(Button)findViewById(R.id.startActivity); //为startActivity按钮绑定事件监听器 startActivity.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent=new Intent(Lifecycle.this,DialogActivity.class); startActivity(intent); } }); //为finish按钮绑定事件监听器 finish.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub //结束该Activity Lifecycle.this.finish(); } }); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); //输出日志 Log.d(TAG, "------------onStart--------------"); } @Override protected void onRestart() { // TODO Auto-generated method stub super.onRestart(); //输入日志 Log.d(TAG,"---------------onRestart-------------"); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); //输入日志 Log.d(TAG,"---------------onResume-------------"); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); //输入日志 Log.d(TAG,"---------------onPause-------------"); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); //输入日志 Log.d(TAG,"---------------onStop-------------"); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); //输入日志 Log.d(TAG,"---------------onDestroy-------------"); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.lifecycle, menu); return true; } }